可编辑的 JComboBox KeyPressed 不工作
Editable JComboBox KeyPressed not working
我有这段代码,我在其中设计了一个 editable JComboBox
来监听我的 keyPressed
事件并显示一条消息,表明按键已按下。但我不知道为什么这不起作用。 作为一个初学者,我可能犯了错误logically/conceptually。
因此,我会征求有关如何构建代码的建议,以使其有效。
代码
import javax.swing.*;
import java.awt.*;
public class testEJCBX extends JFrame {
JComboBox jcbx = new JComboBox();
public testEJCBX() {
super("Editable JComboBox");
jcbx.setEditable(true);
getContentPane().setLayout(new FlowLayout());
getContentPane().add(jcbx);
jcbx.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt)
{
jcbxKeyPressed(evt);
}
});
setSize(300, 170);
setVisible(true);
}
private void jcbxKeyPressed(java.awt.event.KeyEvent evt) {
JOptionPane.showMessageDialog(null, "Key Pressed");
}
public static void main(String argv[]) {
new testEJCBX();
}
}
您不应该为这类事情使用 KeyListener。相反,如果您想检测组合框编辑器组件的更改,请提取它并向其添加一个 DocumentListener:
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Document;
import java.awt.*;
public class TestEJCBX extends JFrame {
JComboBox<String> jcbx = new JComboBox<>();
public TestEJCBX() {
super("Editable JComboBox");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jcbx.setEditable(true);
getContentPane().setLayout(new FlowLayout());
getContentPane().add(jcbx);
JTextField editorComponent = (JTextField) jcbx.getEditor()
.getEditorComponent();
Document doc = editorComponent.getDocument();
doc.addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent e) {
System.out.println("text changed");
}
@Override
public void insertUpdate(DocumentEvent e) {
System.out.println("text changed");
}
@Override
public void changedUpdate(DocumentEvent e) {
System.out.println("text changed");
}
});
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String argv[]) {
new TestEJCBX();
}
}
我有这段代码,我在其中设计了一个 editable JComboBox
来监听我的 keyPressed
事件并显示一条消息,表明按键已按下。但我不知道为什么这不起作用。 作为一个初学者,我可能犯了错误logically/conceptually。
因此,我会征求有关如何构建代码的建议,以使其有效。
代码
import javax.swing.*;
import java.awt.*;
public class testEJCBX extends JFrame {
JComboBox jcbx = new JComboBox();
public testEJCBX() {
super("Editable JComboBox");
jcbx.setEditable(true);
getContentPane().setLayout(new FlowLayout());
getContentPane().add(jcbx);
jcbx.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt)
{
jcbxKeyPressed(evt);
}
});
setSize(300, 170);
setVisible(true);
}
private void jcbxKeyPressed(java.awt.event.KeyEvent evt) {
JOptionPane.showMessageDialog(null, "Key Pressed");
}
public static void main(String argv[]) {
new testEJCBX();
}
}
您不应该为这类事情使用 KeyListener。相反,如果您想检测组合框编辑器组件的更改,请提取它并向其添加一个 DocumentListener:
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Document;
import java.awt.*;
public class TestEJCBX extends JFrame {
JComboBox<String> jcbx = new JComboBox<>();
public TestEJCBX() {
super("Editable JComboBox");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jcbx.setEditable(true);
getContentPane().setLayout(new FlowLayout());
getContentPane().add(jcbx);
JTextField editorComponent = (JTextField) jcbx.getEditor()
.getEditorComponent();
Document doc = editorComponent.getDocument();
doc.addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent e) {
System.out.println("text changed");
}
@Override
public void insertUpdate(DocumentEvent e) {
System.out.println("text changed");
}
@Override
public void changedUpdate(DocumentEvent e) {
System.out.println("text changed");
}
});
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String argv[]) {
new TestEJCBX();
}
}