Hallo erstmal
ich hoffe ihr könnt mir bei meinem Problem weiterhelfen. Ich bastel gerade für mich so ein kleines Datenerfassungsprogramm in dem ich möchte, dass bei manchen Textfeldern so eine Auswahlliste unten erscheint. Das funktioniert an sich auch schon ganz gut nur habe ich ein Problem:
Wenn ich in meinem JTextField mit dem (unten geposteten) Listener eine Eingabe mache und dann per Tastatur "nach unten scrollen" möchte dann springt der kurz auf den ersten Eintrag und dann focusiert er wieder das TextField. Ich habe schon alles mögliche versucht mit umstrukturierung etc ... aber bin leider nicht darauf gekommen. Wäre schön wenn da jemand eine Idee/Typ für mich hätte.
und im Programm sieht das dann so aus :
ich hoffe ihr könnt mir bei meinem Problem weiterhelfen. Ich bastel gerade für mich so ein kleines Datenerfassungsprogramm in dem ich möchte, dass bei manchen Textfeldern so eine Auswahlliste unten erscheint. Das funktioniert an sich auch schon ganz gut nur habe ich ein Problem:
Wenn ich in meinem JTextField mit dem (unten geposteten) Listener eine Eingabe mache und dann per Tastatur "nach unten scrollen" möchte dann springt der kurz auf den ersten Eintrag und dann focusiert er wieder das TextField. Ich habe schon alles mögliche versucht mit umstrukturierung etc ... aber bin leider nicht darauf gekommen. Wäre schön wenn da jemand eine Idee/Typ für mich hätte.
Java:
public class StudentChooser implements KeyListener, ActionListener {
private JTextField field;
private JPopupMenu chooser;
private DatabaseChooser liste;
public StudentChooser (JTextField field, JPopupMenu chooser, DatabaseChooser liste) {
this.field = field;
this.chooser = chooser;
this.liste = liste;
}
/**
* Sobald die Taste losgelassen wird, wird fillPopUp aufergerufen.
* Bei Auswahl der "Items" mit Enter wird dann das ausgewählte
* in das TextFeld übernommen.
*/
@Override
public void keyReleased(KeyEvent arg0) {
fillPopUp();
chooser.setVisible(false);
if(chooser.getComponentCount() != 0)
{
chooser.show(field, 0, field.getHeight());
chooser.setVisible(true);
if(arg0.getKeyCode() != KeyEvent.VK_DOWN) {
field.requestFocus();
}
if(arg0.getKeyCode() == KeyEvent.VK_ESCAPE) {
field.requestFocus();
chooser.setVisible(false);
}
}
if(arg0.getKeyCode() == KeyEvent.VK_ENTER) {
chooser.setVisible(false);
}
}
/**
* Wählt aus der Datenbank die entsprechenden Einträge für die Vorschläge.
*/
private void fillPopUp() {
chooser.removeAll();
chooser.setVisible(false);
int counter = 1;
for(int i = 0; i < liste.getSize(); i++)
{
if(liste.getEntry(i).startsWith(field.getText()) && counter <= 7)
{
JMenuItem mi = new JMenuItem(liste.getEntry(i));
mi.addActionListener(this);
chooser.add(mi);
counter++;
}
}
}
@Override
public void keyPressed(KeyEvent arg0) {
}
@Override
public void keyTyped(KeyEvent arg0) {
}
@Override
public void actionPerformed(ActionEvent arg0)
{
field.setText(arg0.getActionCommand());
chooser.setVisible(false);
}
}
und im Programm sieht das dann so aus :