Swing:如何从编辑器中获取JComponent

时间:2013-01-17 14:29:55

标签: java swing jcombobox jcomponent

您通常如何从其编辑器中获取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。:请不要问我“为什么需要它?”之类的问题。感谢。

1 个答案:

答案 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();