关闭JOptionPane.showInternalOptionDialog窗口本身

时间:2012-12-27 17:30:03

标签: java swing fullscreen joptionpane

final JFileChooser chooser = new JFileChooser(); 
JOptionPane.showInternalOptionDialog(this, chooser, "Browse",
        JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null,
        new Object[]{}, null);
            chooser.addActionListener(new ActionListener() {        
                public void actionPerformed(ActionEvent e) {
                   if(e.getActionCommand().equals(JFileChooser.APPROVE_SELECTION))

                        System.out.println("File selected: " +
 chooser.getSelectedFile());
                        //code to close here
                    } else { 
                        //code to close here
                    }
                }
            });

这段代码看起来很奇怪,但它只是我程序的一部分。我使用全屏GraphicsDevice。我将文件选择器放在内部 JOptionPane 中以保留我的全屏窗口。现在我想以编程方式关闭 JOptionPane 内部本身而不关闭我的actionlistener中的整个应用程序。怎么办呢?

1 个答案:

答案 0 :(得分:0)

调用showInternalOptionDialog时,无法轻松访问对话框的引用。你可以添加选项,即。使用

new Object[] { "Browse", "Cancel" }

而不是

new Object[]{}

然后你最终会有两组按钮。我认为没有简单的方法可以将showInternalOptionDialog与JFileChooser一起使用。我建议你自己创建JInternalFrame。

final JFileChooser chooser = new JFileChooser();
JOptionPane pane = new JOptionPane(chooser, JOptionPane.PLAIN_MESSAGE,
            JOptionPane.DEFAULT_OPTION, null, new Object[0], null);
final JInternalFrame dialog = pane.createInternalFrame(this, "Dialog Frame");
chooser.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals(JFileChooser.APPROVE_SELECTION)) {
            System.out.println("File selected: "
                    + chooser.getSelectedFile());
        }
        dialog.setVisible(false);
    }
});
dialog.setVisible(true);

同样在您的代码段中,您将在showInternalOptionDialog之后调用addActionListener。只有在关闭对话框后,showInternalOptionDialog调用才会返回,因此ActionListener的创建时间太晚。您需要首先添加addActionListener然后显示对话框。