Swing: Как да получите 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.: Моля, не ми задавайте въпроси като „защо ви трябва?“. Благодаря.


person Michal Vician    schedule 17.01.2013    source източник
comment
:) защо не трябва да питаме "защо ви трябва?" ? какво връща getParent() във вашия случай?   -  person vishal_aim    schedule 17.01.2013
comment
Не мога да устоя да попитам: защо ви трябва това?   -  person Guillaume Polet    schedule 17.01.2013
comment
Моля, не ми задавайте въпроси като защо ви трябва? Трябва да е строго секретно, а? По-добре е да ни дадете представа какво точно се опитвате да постигнете, за да можем да дадем подходящи решения.   -  person David Kroukamp    schedule 17.01.2013
comment
каква е причината да снабдите ListSelection Listener с AWTEventListener   -  person mKorbel    schedule 17.01.2013


Отговори (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();
person AlexR    schedule 17.01.2013