您通常如何从其编辑器中获取JComponent
?
示例:
让我们有可编辑的JComboBox
。因此,组合具有编辑器(默认为JTextField
)。
JComboBox b = new JComboBox();
b.setEditable(true);
现在将“全局”键盘侦听器添加到Swing应用程序。
Toolkit.getDefaultToolkit().addAWTEventListener(
new AWTEventListener() {
public void eventDispatched(AWTEvent e) {
JComponent c = (JComponent) e.getSource();
System.out.println(c); // <- printing the event source
}
},
AWTEvent.KEY_EVENT_MASK);
向组合框b
输入文字的输出显示,关键事件的来源是b
的编辑器,而不是组合框b
本身:
javax.swing.plaf.metal.MetalComboBoxEditor$1[,0,0, ...
javax.swing.plaf.metal.MetalComboBoxEditor$1[,0,0, ...
javax.swing.plaf.metal.MetalComboBoxEditor$1[,0,0, ...
...
有没有办法从其编辑器或关键事件中引用b
?
如果不是,我如何获得“当前正在编辑的组合框”的引用?
P.S。:请不要问我“为什么需要它?”之类的问题。感谢。
答案 0 :(得分:2)
调用getEditorComponent()
。此方法在接口ComboBoxEditor
中定义:
public interface ComboBoxEditor {
/** Return the component that should be added to the tree hierarchy for
* this editor
*/
public Component getEditorComponent();
................
首先将其投放到ComboBoxEditor
:
Component component = (ComboBoxEditor)event.getSource()).getEditorComponent();