我需要有一个comboBox,每次该字母,数字或空格写(释放键),一个字符串是返回的文本写在comboBox内,而无需按Enter键。
例如:我按下de“a”键,然后释放键“a”,我的字符串需要返回“a”接下来,我按下“B”键,我意识到,我的字符串返回“ab”等。
我使用的代码来自:http://www.java2s.com/Tutorials/Java/Swing_How_to/JComboBox/Add_key_listener_to_Editable_JcomboBox_TextField.htm
我在Key Released事件中添加了:
Object value = combobox.getSelectedItem();
System.out.println("String: " + value);
在这种情况下,只有当我按Enter键时才能工作,但我不希望这样
艾米的建议
谢谢
import java.awt.FlowLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
//w ww.j a v a2 s . c om
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class SwingListenerDemo extends JFrame implements KeyListener {
JComboBox<String> combobox;
JComboBox<String> combobox1 = new JComboBox(new String[]{"b","b","c"});
public static void main(String[] args) {
new SwingListenerDemo();
}
private SwingListenerDemo() {
String[] options = {"Red", "Green", "Blue"};
combobox = new JComboBox<String>(options);
combobox.setEditable(true);
combobox.setSelectedIndex(-1);
combobox1.setEditable(true);
JTextField editor = (JTextField) combobox.getEditor().getEditorComponent();
System.out.println("editor" + editor);
editor.addKeyListener(this);
setLayout(new FlowLayout());
add(combobox);
add(combobox1);
pack();
setVisible(true);
}
public void keyTyped(KeyEvent arg0) {
System.out.println("Key Typed " + arg0.getKeyCode());
}
public void keyPressed(KeyEvent arg0) {
System.out.println("Key Pressed " + arg0.getKeyCode());
}
public void keyReleased(KeyEvent arg0) {
System.out.println("Key Released " + arg0.getKeyCode());
Object value = combobox.getSelectedItem();
System.out.println("String: " + value);
}
}
1条答案
按热度按时间46qrfjad1#
不要使用
KeyListener
作为文本字段的监视器输入,因为它不适合这个任务,原因有很多。使用
DocumentListener
。参见How to Write a Document Listener下面的例子使用了一个自定义的
ComboBoxEditor
,你不“需要”进行这种扩展,但是它确实隔离了核心功能,这使得它更容易重用。同样,您可以使用工厂方法来配置预先存在的
JComboBox
,但这取决于您。