Vit*_*aly 3 java keyboard search swing jcombobox
当我在不可编辑的JComboBox上注册ActionListener时,每当用户使用箭头键或上下文搜索(键入项目名称的第一个字母)更改所选项时,它就会触发actionPerformed().
我在这里找到了类似的问题: 如何在使用键盘滚动弹出列表时使JComboBox所选项目不被更改.但该解决方案不包括上下文搜索选项.当我输入内容时,它会触发actionPerformed().
如何确定用户何时使用回车键或鼠标点击确认所选项目?
更好的是实现ItemListener(激发两次SELECTED和DESELECTED),而不是ActionListener和KeyBindings,也许这里有一个简单的例子
import java.awt.*;
import javax.swing.*;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
public class PopupTest {
public static void main(String[] args) {
final JComboBox c = new JComboBox();
c.addPopupMenuListener(new PopupMenuListener() {
@Override
public void popupMenuCanceled(PopupMenuEvent e) {
System.out.println(e.getSource());
}
@Override
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
System.out.println(e.getSource());
}
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
System.out.println(e.getSource());
}
});
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().setLayout(new FlowLayout());
f.getContentPane().add(c);
f.pack();
f.setVisible(true);
}
private PopupTest() {
}
}
Run Code Online (Sandbox Code Playgroud)