Hallo Pete,
hab im Konstruktor der JList einen MouseListener hinzugefügt. Bei einfachem Klick wird das entsprechende Wort in das Textfeld eingefügt, das Popup bleibt jedoch offen. Durch Doppelklick wird sowohl das selektierte Wort eingefügt als auch das Popup geschlossen.
Vg Erdal
hab im Konstruktor der JList einen MouseListener hinzugefügt. Bei einfachem Klick wird das entsprechende Wort in das Textfeld eingefügt, das Popup bleibt jedoch offen. Durch Doppelklick wird sowohl das selektierte Wort eingefügt als auch das Popup geschlossen.
Java:
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.DefaultCaret;
import javax.swing.text.Position;
public class TextFieldExtended extends JFrame implements KeyListener {
String[] items = { "auto", "apfel", "rot", "regen", "birne", "blau",
"benzin", "gelb", "blaue" };
JList list = new JList(items);
JTextField textfeld = new JTextField(20);
JScrollPane scroll = new JScrollPane(list);
JPopupMenu pop = new JPopupMenu();
DefaultCaret dcaret = (DefaultCaret) textfeld.getCaret();
public TextFieldExtended() {
list.setFocusable(false);
scroll.getVerticalScrollBar().setFocusable(false);
scroll.getHorizontalScrollBar().setFocusable(false);
scroll.setBorder(null);
pop.add(scroll);
add(textfeld);
setLocationByPlatform(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
textfeld.addKeyListener(this);
pop.addKeyListener(this);
list.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
textfeld.setText(list.getSelectedValue().toString());
pop.setVisible(false);
textfeld.requestFocus();
} else
textfeld.setText(list.getSelectedValue().toString());
}
});
}
public static void main(String[] args) {
new TextFieldExtended();
}
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_DOWN:
list.setSelectedIndex(list.getSelectedIndex() + 1);
break;
case KeyEvent.VK_UP:
list.setSelectedIndex(list.getSelectedIndex() - 1);
break;
case KeyEvent.VK_ENTER:
if (pop.isShowing())
textfeld.setText(list.getSelectedValue().toString());
break;
default: {
int index = -1;
if (!textfeld.getText().equals(""))
index = list.getNextMatch(textfeld.getText(), 1,
Position.Bias.Forward);
if (index != -1) {
list.setSelectedIndex(index);
pop.setLocation((int) textfeld.getLocationOnScreen().getX()
+ dcaret.x, (int) textfeld.getLocationOnScreen().getY()
+ textfeld.getHeight());
pop.show(textfeld, dcaret.x, textfeld.getY()
+ textfeld.getHeight());
} else
pop.setVisible(false);
textfeld.requestFocus();
}
}
if (list.getSelectedValue() != null
&& list.getSelectedValue().equals(textfeld.getText()))
pop.setVisible(false);
}
}
Vg Erdal