2013-12-13 4 views
1

Знаете ли вы, как я могу закрыть окно JFrame, пока я открываю другое? Я знаю, как это работает на кнопках, но теперь я хочу сделать то же самое для пунктов меню.JFrame item menu close

Вот мой код:

public static void main(String[] args) { 
    JFrame frame = new JFrame("Test"); 
    frame.setVisible(true); 
    frame.setSize(200, 200); 
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

    JLabel label = new JLabel("Hello"); 
    JPanel panel = new JPanel(); 
    frame.add(panel); 
    panel.add(label); 

    JMenuBar menu = new JMenuBar(); 
    frame.setJMenuBar(menu); 
    JMenu action = new JMenu("Action"); 
    menu.add(action); 
    JMenuItem Info = new JMenuItem("Info"); 
    action.add(Info); 

} 
+0

* «закрыть окно JFrame, когда я открываю другое?» * 1) См. [Использование нескольких JFrames, Good/Bad Practice?] (Http://stackoverflow.com/a/9554657/418556) 2) Для многих компонентов в одном пространстве используйте ['CardLayout'] (http://docs.oracle.com/javase/7/docs/api/java/awt/CardLayout.html), как показано в этом [кратком примере] (http://stackoverflow.com/a/5786005/418556). 3) В качестве альтернативы, возможно, конвертировать один из фреймов в модальный 'JDialog'. –

+0

Хорошо, спасибо. – user3100234

+0

BTW - Для лучшей помощи, скорее всего, опубликуйте [SSCCE] (http://sscce.org/), который работает с кнопками, и добавляет пункт меню «Следующий GUI». Удалите ненужный рывок, как и другие пункты меню и т. Д. –

ответ

3

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

Он работает одинаково для элементов меню. Вы добавляете ActionListener в пункт меню. Вы должны иметь возможность использовать тот же ActionListener, который вы используете для кнопки.

Вопрос в том, почему вы закрываете/открываете рамки? Как правило, вы бы либо:

  1. дисплей диалоговое окно ребенка, чтобы отобразить/запрос для получения дополнительной информации
  2. Используйте Card Layout для замены панелей в основной раме.
+0

Я думаю, что буду использовать макет карты. Я не знаю, почему, но некоторые ошибки появились, когда я пытался это сделать: создайте новый класс и добавьте его в menuitem.addActionListener, а позже в этом классе вызовите frame.dispose(). Но этот шаг недоступен из класса (не видел фрейм?), Поэтому я решил написать здесь. – user3100234