I am writing code in java, when I enter some letter in the JTextField then the related items should be picked up from my database and should be shown in a drop down menu/list. Here is the code that I am using but there is a problem:
package rough2;
import java.awt.*;
import javafx.scene.input.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;
public class Rough2 extends JFrame{
public static final int MAXITEMS = 100;
JPanel panel = new JPanel();
JTextField textField = new JTextField(10);
String[] myDataBase = { "Alice", "Bob", "Rose", "Coggu", "Alpha", "david","peter", "max" };
String[] listItems;
JList theList = new JList();
public Rough2() {
this.add(panel);
panel.setPreferredSize(new Dimension(500, 300));
panel.add(textField);
panel.add(theList);
textField.addKeyListener(new KeyListener() {
@Override
public void keyTyped(java.awt.event.KeyEvent e) {
String compareString = ("" + textField.getText()+ e.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);
}
@Override
public void keyPressed(java.awt.event.KeyEvent e) {
}
@Override
public void keyReleased(java.awt.event.KeyEvent e) {
}
});
}
public static void main(String[] args) {
// TODO code application logic here
final Rough2 answer = new Rough2();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
answer.pack();
answer.setVisible(true);
}
});
}
}
The problem is that the result is showing in a list not in a drop down menu under the text field which I want.
Also there is another problem. That is when I write suppose "Al" to find the result, it gives me "Alice" as result but as soon as I delete "l" from the "Al" it doesn't show me anything. All the result or output goes away or in other words I get a blank list.
Kindly help me solve these two problems:
- Show relative result to the letter written under the text field as in drop down menu and
- Show result even after I erase some letter/s from the written letters as explained in the above example.