【问题标题】:AutoComplete Decorator自动完成装饰器
【发布时间】:2012-12-07 04:06:57
【问题描述】:

我正在 Swing 应用程序中实现 autocompleteDecorator。我的代码是这样的。

public inventory_purchase() {
    initComponents();
    AutoCompleteDecorator.decorate(this.combo);
}

public void autocomplete(){
    try{
        Class.forName("org.apache.derby.jdbc.ClientDriver");
        Connection conn= DriverManager.getConnection("jdbc:derby://localhost:1527/C:/jpublisher/pub", "APP", "app");
        Statement stmt = conn.createStatement();
        String query="SELECT * FROM INVENTORY";
        ResultSet rs = stmt.executeQuery(query);
        while(rs.next()){
            combo.addItem(rs.getString("CATEGORY"));
        }
    }
    catch ( ClassNotFoundException | SQLException ex) {
        JOptionPane.showMessageDialog(null, "Data cannot be loaded. Error!!");
    }   

}

这个自动完成装饰器只有在我调用这个函数时才起作用

formWindowOpened(java.awt.event.WindowEvent evt){autocomplete();} 

如何将此自动完成功能与关键侦听器一起使用?喜欢:

private void comboKeyReleased(java.awt.event.KeyEvent evt) {
    autocomplete();
}

还有其他简单的过程来使用数据库中的自动完成功能吗?

【问题讨论】:

  • 您不应该在每次需要发出语句时都实例化数据库连接。您应该在您的应用启动时执行此操作并将其保存在单例中

标签: java swing autocomplete decorator swingx


【解决方案1】:

您可能想使用Key Bindings。这是一个简单的例子:

import java.awt.event.*;
import javax.swing.*;

public class KeyBindings extends Box{
    public KeyBindings(){
        super(BoxLayout.Y_AXIS);

        final JLabel text = new JLabel("Original Text");
        add(text);

        Action action = new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                text.setText("New Text");
            }};
         String keyStrokeAndKey = "control H";
         KeyStroke keyStroke = KeyStroke.getKeyStroke(keyStrokeAndKey);
         getInputMap().put(keyStroke, keyStrokeAndKey);
         getActionMap().put(keyStrokeAndKey, action);
    }


    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(new KeyBindings());
        frame.pack();
        frame.setVisible(true);
    }
}

【讨论】:

  • +1 用于键绑定;顺便说一句,pack() 调用 validate()
  • @trashgod - Touché。不知道我是怎么养成这样做的习惯的——一定是复制/粘贴综合症。我会把它从那里拿出来(虽然我不确定我是否足够专注于从我所有的样本中提取它,但我以后会尽量不这样做)。
  • 其实我并没有尝试键绑定。它只是一个自动完成组合框,其中数据将从数据库中填充。请帮帮我。
  • @PranjalCholadhara Ah - 在这种情况下,您可能需要使用 DocumentListener: docs.oracle.com/javase/1.4.2/docs/api/javax/swing/event/…
  • 但是当我使用文档侦听器时,自动完成装饰器不再起作用。
猜你喜欢
  • 2014-05-21
  • 2012-02-17
  • 2014-09-19
  • 2013-01-20
  • 2019-04-25
  • 1970-01-01
  • 2013-02-06
  • 2011-05-22
  • 2023-03-10
相关资源
最近更新 更多