我试图在用户点击(用鼠标)JComboBox中的项目时调用函数;但是,我不想为任何键盘事件触发此事件 - 我只想点击下拉列表的特定单元格(我知道addActionListener和addItemListener,但是这些事件被触发了更多事件而不是我想要的)。
编辑:我应该指定mouseClicked也不起作用 - 似乎没有事件被触发(但是,它们在某一时刻,但是当发生这种情况时,它们也会触发文本字段的点击),但我认为这是从标题中假设的。
我也试过这里给出的解决方案(也没有工作):Editable JCombobox mouseclicked event not working
EDIT2:我尝试了以下操作,但点击时仍然没有输出:
try {
Field popupInBasicComboBoxUI = BasicComboBoxUI.class.getDeclaredField("popup");
popupInBasicComboBoxUI.setAccessible(true);
BasicComboPopup popup = (BasicComboPopup)popupInBasicComboBoxUI.get(attachedCB.getUI());
Field scrollerInBasicComboPopup = BasicComboPopup.class.getDeclaredField("scroller");
scrollerInBasicComboPopup.setAccessible(true);
JScrollPane scroller = (JScrollPane)scrollerInBasicComboPopup.get(popup);
scroller.getViewport().getView().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
System.out.println("nope");
}
});
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
catch (NoSuchFieldException e) {
e.printStackTrace();
}
答案 0 :(得分:2)
您错过了将其添加到我在评论中发布的链接中的scrollPane的视口视图中。
Field scrollerInBasicComboPopup = BasicComboPopup.class.getDeclaredField("scroller");
scrollerInBasicComboPopup.setAccessible(true);
JScrollPane scroller = (JScrollPane) scrollerInBasicComboPopup.get(popup);
scroller.getViewport().getView().addMouseListener(listener);
答案 1 :(得分:0)
希望这有帮助,
jComboBox.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jComboBoxMouseClicked(evt);//your logic here
}
});
答案 2 :(得分:0)
你应该使用 java.awt.event.ActionEvent ,这是(引自javadoc)a
像这样:语义事件,表示组件定义的操作 发生了。此高级事件由组件生成(例如 按钮)当特定于组件的操作发生时(例如 按下)...
jComboBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
javax.swing.JComboBox source = (javax.swing.JComboBox)evt.getSource();
// use getSelectedIndex to know the item if needed
labelTextField.setText(source.getSelectedItem().toString());
}
});
注意 getSelectedItem 和 getSelectedIndex 和 getSelectedObjects 方法:这可让您知道选择了哪个项目并仅处理您想要的项目< / p>