2013-01-17 50 views
1

如何從編輯器中獲得JComponentSwing:如何從其編輯器中獲取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 .:請不要問我「你爲什麼需要它?」等問題。謝謝。

+3

嘗試使用的getParent() – Petr

+2

:)爲什麼我們不應該問? getParent()在你的情況下返回什麼? –

+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(); 
相關問題