2013-04-03 5 views
0

Я построил класс GameFrame, который имеет JFrame с jmenubar и добавит несколько элементов в меню. Я разделяю класс actionlistener (реализую свой собственный и передаю его как аргумент в рамки jmenubar) из причин GameFrame для ООП.Диалог по выбору jmenuitem

Проблема заключается в том, что, когда выбран один из JmenuItems, он должен обсудить диалог с просьбой ввести URL-адрес. Но этот диалог создается только при выборе элемента меню так, как я могу сделать : делать следующее? (Что не очень ООП)

@Override 
public void actionPerformed(ActionEvent e) { 
    JMenuItem item = (JMenuItem) e.getSource(); 

    if (item.getText().equals("URL")) { 
     //create a dialogue 
     //get the input 
     //pass it to something else 
    } 
} 

Я хочу, чтобы избежать создания свинг компонентов внутри моего класса EventHandler и избежать eventhandlers в моем классе компонентов, но я не вижу, как вокруг него.

+0

Не понимаю, почему он не должен быть очень ООП. Не могли бы вы рассказать об этом? Во всяком случае, почему бы вам не создать свой JDialog где вы инициализируете остальные компоненты и просто делаете его видимым в actionPerformed и невидимом, как только вы получите URL-адрес? –

ответ

1

Создание пользовательского ActionLIstener, и для конструктора передать ссылку пункта он нуждается в ссылках (даже если объект вы положили слушатель тот же вам нужно по методу actionPerformed().

class MyActionListener implements ActionListener { 

    JMenuItem item; 

    MyActionListener(JMenuItem item) { 
     this.item = item; 
    } 

    public void actionPerformed(ActionEvent e) { 
     // here you have the reference for the item. Printing the text: 
     System.out.println(item.getText()); 
    } 

} 

con этот подход состоит в том, что вам понадобится один прослушиватель для каждого JMenuItem.

+0

Также рассмотрите ['Action'] (http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html). – trashgod

+0

Поздно принимаю, это подтолкнуло меня в правильном направлении :) – arynaq

Смежные вопросы