1

一般来说,你会如何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从它的编辑器或关键事件中获取参考?如果没有,如何获得“当前编辑组合框”的参考?

PS:请不要问我“你为什么需要它?”之类的问题。谢谢。

4

1 回答 1

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();
于 2013-01-17T14:55:15.460 回答