Java从内部JPanel的ShowOptionDialog返回

Java从内部JPanel的ShowOptionDialog返回,java,swing,jpanel,joptionpane,jdialog,Java,Swing,Jpanel,Joptionpane,Jdialog,我曾经 JOptionPane.showOptionDialog(null, 新建MyPanel(), “进口”, JOptionPane.DEFAULT_选项, JOptionPane.PLAIN\u消息, null,新对象[]{},null); 因为我不想要OptionDialog提供的默认按钮,我在MyPanel Extendes JPanel中创建了按钮,所以我现在的问题是如何从MyPanel中关闭由ActionEvent触发的OptionDialog?我不在乎返回值,只要对话框消失。我

我曾经

JOptionPane.showOptionDialog(null, 新建MyPanel(), “进口”, JOptionPane.DEFAULT_选项, JOptionPane.PLAIN\u消息, null,新对象[]{},null);
因为我不想要OptionDialog提供的默认按钮,我在
MyPanel Extendes JPanel
中创建了按钮,所以我现在的问题是如何从
MyPanel
中关闭由
ActionEvent
触发的OptionDialog?我不在乎返回值,只要对话框消失。我意识到这可能不是最好的设计,但我已经做了很多次了,所以我更喜欢一个修复方案,尽可能少地改变结构。谢谢

使用以下命令将
JOptionPane
转换为
JDialog

现在在
actionPerformed(ActionEvent ae)
方法中,只需编写:

JOptionPane optionPane = new JOptionPane(getPanel(),
                        JOptionPane.PLAIN_MESSAGE,
                        JOptionPane.DEFAULT_OPTION, 
                        null,
                        new Object[]{}, null);
dialog = optionPane.createDialog("import");
dialog.setVisible(true);
请看这个工作示例:

dialog.dispose();

只是想澄清一下,因为L&F,你不喜欢这些按钮?因为我想你知道我们可以传递自己的按钮文本?@user2507946是的,我知道。单击时,默认按钮将关闭对话框。我不想那样。@winkewhisky:Do-watch,我已经在你的
JOptionPane
中更改了一些选项,尽管它们仍然存在。
dialog.dispose();
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.*;
import javax.imageio.ImageIO;

public class JOptionPaneExample
{
    private JDialog dialog;

    private void displayGUI()
    {
        JOptionPane optionPane = new JOptionPane(getPanel(),
                        JOptionPane.PLAIN_MESSAGE,
                        JOptionPane.DEFAULT_OPTION, 
                        null,
                        new Object[]{}, null);
        dialog = optionPane.createDialog("import");
        dialog.setVisible(true);
    }

    private JPanel getPanel()
    {
        JPanel panel = new JPanel();
        JLabel label = new JLabel("Java Technology Dive Log");
        ImageIcon image = null;
        try
        {
            image = new ImageIcon(ImageIO.read(
                    new URL("http://i.imgur.com/6mbHZRU.png")));
        }
        catch(MalformedURLException mue)
        {
            mue.printStackTrace();
        }
        catch(IOException ioe)
        {
            ioe.printStackTrace();
        } 
        label.setIcon(image);

        JButton button = new JButton("EXIT");
        button.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent ae)
            {
                dialog.dispose();
            }
        });

        panel.add(label);
        panel.add(button);

        return panel;
    }
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new JOptionPaneExample().displayGUI();
            }
        });
    }
}