2012-12-19 106 views
1

我在Swing應用程序中實現了autocompleteDecorator。我的代碼是這樣的。AutoComplete修飾器

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(); 
} 

是否有任何其他簡單的過程來使用從數據庫的自動完成?

+0

你不應該在每次需要發佈語句時都實例化數據庫連接。你應該在你的應用程序啓動時執行此操作,並將它保存在單鍵版本 – amphibient

回答

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); 
    } 
} 
+0

+1中進行密鑰綁定;另外,'pack()'調用'validate()'。 – trashgod

+0

@trashgod - Touché。不知道我是如何養成這樣做的 - 必須是複製/粘貼綜合症。我會從那裏得到它(儘管我不確定我是否足夠專注於將其抽出我的所有樣本,我將在未來嘗試不這樣做)。 –

+0

其實我不是嘗試鍵綁定。這只是一個自動完成組合框,其中數據將從數據庫中填充。請幫幫我。 –