Java全屏模式对话框

Java全屏模式对话框,java,swing,modal-dialog,fullscreen,jdialog,Java,Swing,Modal Dialog,Fullscreen,Jdialog,如何创建可以用作内部对话框的自定义模态JDialog?用于FullscreenExclusiveMode 我有一个JScrollPane(带有一个巨大的滚动条),其中充满了巨大的按钮,如下所示: +----------------------+------+ | FOO | /\ | |______________________+------+ | |______| | BAR |

如何创建可以用作内部对话框的自定义模态JDialog?用于FullscreenExclusiveMode

我有一个JScrollPane(带有一个巨大的滚动条),其中充满了巨大的按钮,如下所示:

+----------------------+------+
|         FOO          |  /\  |
|______________________+------+
|                      |______|
|         BAR          |      |
|______________________|  ==  |
|                      |______|
|         BIZ          |      |
+______________________+------+
|                      |  \/  |
|----------------------+------+
我需要用户使用巨大的滚动条滚动浏览,点击一个特定的按钮选择它并关闭对话框。该对话框处于全屏独占模式。关闭按钮需要被禁用,并且不需要有“确定”或“取消”按钮,无论单击哪个按钮,都需要更新一个值,然后在对话框上调用frame.dispose()

现在我使用的是一个内部框架,但是这个框架并没有出现在其他所有东西的前面,因为我没有使用JDesktop。我也尝试过JDialog,但它最小化了应用程序

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);
    }
}

JOptionPane.showXXXDialog(…)允许在创建自定义内部对话框时进行大量自定义。

JOptionPane构造函数的
消息
参数可以是
组件
以及字符串,例如,它可以是您的
JScrollPane

要从选项窗格中删除标准按钮,请使用空数组调用
setOptions(Object[])

尝试此操作

.
.
.
            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");
                    fullscreenFrame.invalidate();
                    fullscreenFrame.repaint();
                    optionPane.setValue(button);
                }
            });
            JInternalFrame frame  = optionPane.createInternalFrame(panel, "Internal Dialog");
            frame.getContentPane().removeAll();
            JPanel pnl = new JPanel(new BorderLayout());
            pnl.add( button, BorderLayout.SOUTH );
            pnl.add( new JScrollBar(), BorderLayout.CENTER );
            frame.getContentPane().add( pnl );
            frame.setVisible(true);

我正在寻找一个模式框架,需要有一个滚动窗格,其中有一堆大按钮。@dah使用JOptionPane有什么问题?如果您不喜欢它,您可以创建自己的JDialog,并以类似的方式使用它。我不认为我可以将JOptionPane与一系列复杂的组件一起使用,比如JScrollPane,其中包含20个(100x40)按钮。我还需要删除“确定”和“取消”按钮。JDialog不能在全屏模式下工作。它会导致应用程序失去全屏模式和焦点,并将我返回到桌面,这是一个主要问题,因为它用于触摸屏界面,只能通过远程桌面上的键盘终止。是否可以删除“确定”和“取消”按钮,禁用右上角的“关闭”按钮,并向其传递一个JScrollPane,使其成为其中心的组件?无论如何,是否要删除窗口装饰或使其无法使用x关闭?@dah,取决于您如何显示它。如果您使用
createDialog()
,那么在生成的
JDialog
上尝试
setUndecorated(true)
。希望我可以为这些按钮添加操作侦听器this.getParent().getParent().hide()或.dispose()@dah,如果对话框是模态的,那么当您调用
optionPane.setValue(此按钮的名称)时
在ActionListener中,对话框将关闭。这非常有用。我担心自己找不到解决办法。似乎没有多少人使用swing进行全屏应用。