Как создать собственный модальный JDialog, который можно использовать как внутренний диалог? Для использования в FullscreenExclusiveMode.
У меня есть JScrollPane (с огромной полосой прокрутки), полный огромных кнопок, таких как:
+----------------------+------+
| FOO | /\ |
|______________________+------+
| |______|
| BAR | |
|______________________| == |
| |______|
| BIZ | |
+______________________+------+
| | \/ |
|----------------------+------+
Мне нужно, чтобы пользователь использовал гигантскую полосу прокрутки для прокрутки и коснулся определенной кнопки, чтобы выбрать ее и закрыть диалог. Диалог в полноэкранном монопольном режиме. Кнопка закрытия должна быть отключена, и ей не нужно иметь кнопки «ОК» или «Отмена», какую бы кнопку они не нажимали, нужно обновить значение и затем вызвать frame.dispose () в диалоговом окне.
Сейчас я использую внутреннюю рамку, но рамка не всплывает перед всем остальным, потому что я не использую JDesktop. Я также пробовал JDialog, но это минимизирует приложение.
JOptionPane.showInternalDialog () работает, но как мне построить мои собственные внутренние диалоги таким же образом, чтобы они могли отображаться? Если я создаю внутренний фрейм, а затем добавляю его в компонент, он просто находится внутри этого компонента, а не над всем.
РЕДАКТИРОВАТЬ: просмотрел эти классы и попробовал фабрику всплывающих окон, но кажется, что всплывающие окна не работают надежно в полноэкранном режиме.
РЕДАКТИРОВАТЬ: Попытка JOptionPane.createInternalFrame (), вот демонстрация, с которой я работаю, но она пока не работает.
public class FullscreenDialog {
public static final void main(final String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//uses os window manager
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(800,600));
final JLabel label = new JLabel("Something to say.");
panel.add(label);
final JFrame fullscreenFrame = new JFrame();
fullscreenFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
fullscreenFrame.setUndecorated(true);//To remove the bars around the frame.
fullscreenFrame.setResizable(false);//resizability causes unsafe operations.
fullscreenFrame.setContentPane(panel);
fullscreenFrame.validate();
GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(fullscreenFrame);//actually applies the fullscreen.
final JOptionPane optionPane = new JOptionPane();
optionPane.add(new JLabel("Some alert"));
final JButton button = new JButton();
button.setText("Press me.");
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
label.setText("worked");
optionPane.setValue(button);
}
});
JInternalFrame frame = optionPane.createInternalFrame(panel, "Internal Dialog");
frame.setVisible(true);
}
}