2

如何创建可用作内部对话框的自定义模态 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);
    }
}
4

3 回答 3

3

构造函数的message参数JOptionPane可以是 aComponent也可以是字符串,例如它可以是你的JScrollPane.

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

于 2011-05-25T20:49:33.010 回答
2

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

于 2011-05-24T20:19:14.427 回答
1

尝试这个..

.
.
.
            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);
于 2011-05-26T14:48:00.450 回答