【问题标题】:Swing: How to get JComponent from its editorSwing:如何从其编辑器中获取 JComponent
【发布时间】:2013-01-17 14:29:54
【问题描述】:

您一般如何从其编辑处获得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.:请不要问我“你为什么需要它?”之类的问题。谢谢。

【问题讨论】:

  • :) 为什么我们不应该问“你为什么需要它?” ? getParent() 在您的情况下返回什么?
  • 我忍不住要问:你为什么需要那个?
  • 请不要问我“你为什么需要它?”之类的问题一定是绝密吧?最好让我们准确了解您想要实现的目标,以便我们提供适当的解决方案。
  • 使用 AWTEventListener 提供 ListSelection 侦听器的原因

标签: java swing jcombobox jcomponent


【解决方案1】:

调用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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2015-06-14
    • 2013-10-07
    • 2011-05-09
    • 1970-01-01
    • 2011-10-05
    相关资源
    最近更新 更多