2009-08-01 65 views
2

私はテキストフィールドにいくつかの文字を入力すると、関連するアイテムがデータベースから取得され、ドロップダウンリストとして表示されるはずです。 例: テキストフィールドに 'J'と入力し、データベースに{"Juby"、 "Jaz"、 "Jasmine"、 "Joggy" ....}などの名前を付けています リストから選択することができます。 awtに事前定義されたコントロールがありますか? ThnxJTextField内のドロップダウンリスト

答えて

3

これは、あなたが尋ねたものを実装する小さな例です...この例では、データベースは、文字列のベクトルである。

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 

public class Answer extends JFrame { 
    public static final int MAXITEMS = 100; 
    JPanel panel = new JPanel(); 
    JTextField textField = new JTextField(10); 
    String[] myDataBase = { "Juby", "Jaz", "Jasmine", "Joggy", "one", "dog","cat", "parot" }; 
    String[] listItems; 
    JList theList = new JList(); 

    public Answer() { 
     this.add(panel); 
     panel.setPreferredSize(new Dimension(500, 300)); 
     panel.add(textField); 
     panel.add(theList); 

     textField.addKeyListener(new KeyAdapter() { 

      public void keyTyped(KeyEvent ke) { 
       String compareString = ("" + textField.getText() + ke.getKeyChar()); 
       listItems = new String[MAXITEMS]; 

       if (compareString.trim().length() > 0){ 
        int counter = 0; 
        for (int i = 0; i < myDataBase.length; i++) { 
         if (counter < MAXITEMS) { 
          if (myDataBase[i].length() >= compareString.length() && 
            myDataBase[i].substring(0, compareString.length()).equalsIgnoreCase(compareString)) { 
           listItems[counter] = myDataBase[i]; 
           counter++; 
          } 
         } 
        } 
       } 

       theList.setListData(listItems); 
      } 
     }); 

    } 

    public static void main(String[] args) { 
     final Answer answer = new Answer(); 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       answer.pack(); 
       answer.setVisible(true); 
      } 
     }); 
    } 

} 
+0

私はコードを試しましたが、機能していません –

+0

"Juby"、 "Jaz"、 "Jasmine"という単語を見るためには、 jではなく。 コードを貼り付けてコピーしても問題ありません。エラーメッセージがありますか?あなたが正確に何をすればそれは言うのですか? – Pitelk

+1

コードがバグです:範囲外の例外の例外が発生しました.. – Kais

2

なぜJComboBoxを使用しないのですか?デフォルトでは、ユーザーが読み取り専用コンボボックスにキーストロークを入力し、コンボボックスの項目が入力されたキーストロークで始まると、コンボボックスはその項目を選択します。

または、setEditable(true)を使用して編集可能にするJComboBoxを設定し、KeySelectionManagerを使用できます。このリンクでは、複数のキーストロークでJComboBoxコンポーネント内の項目を選択する方法について説明します。