Откройте всплывающее окно из JMenuItem java - PullRequest
0 голосов
/ 05 мая 2010

У меня есть JMenu с JMenuItem, и когда я нажимаю на это, мне нужно открыть JFrame или окно, другими словами компонент с внутренним JButton, JTextField, .. .

Как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 05 мая 2010

Вы можете создать JFrame так же, как вы создали исходный JFrame, и позвонить

setVisible(true);

в ActionListener вашего JMenuItem, чтобы сделать его видимым при нажатии на меню.


Если вы хотите, чтобы он был модальным (исходный кадр не может быть доступен, пока не закрыто новое окно), вы можете вместо этого использовать JDialog, установив modal в конструктор равным true или вызвав setModal(true).

0 голосов
/ 05 мая 2010

Вы путаете "всплывающие окна" и "окна".

Всплывающее окно обычно отображается при щелчке правой кнопкой мыши по какому-либо объекту. Во всплывающем окне отобразится список действий, которые можно выполнить над этим объектом. Например, текстовое поле может иметь «вырезать», «копировать» и «вставить». Прочитайте раздел из учебника по Swing " Вызов всплывающего меню " для получения дополнительной информации.

Окно используется для отображения других компонентов Swing в JFrame или JDialog.

Учитывая, что вы вызываете это действие из пункта меню, я думаю, вы, вероятно, захотите создать и отобразить модальный JDialog, а не JFrame или всплывающее окно.

Также, читая руководство, прочитайте раздел «Использование менеджеров по макету». Использование нулевых макетов - не лучший способ создания диалога.

0 голосов
/ 05 мая 2010

Я пишу в ответе для хорошего просмотра кода:

Если я использую JFrame, я получаю эту ошибку: "java.lang.IllegalArgumentException: добавление окна в контейнер".

Это мой код в методе actionPerformed:

PopupFactory factory = PopupFactory.getSharedInstance();
JFrame frame = new JFrame();
frame.setLayout(null);
frame.setBounds(428, 99, 185, 155);

final JButton button = new JButton();
button.setText("Button");
button.setBounds(10, 93, 111, 25);
frame.getContentPane().add(button);

final Popup popup = factory.getPopup(null, frame, 200, 200);
popup.show();
...