Java 自定义JOptionPane对话框

Java 自定义JOptionPane对话框,java,swing,jlabel,joptionpane,imageicon,Java,Swing,Jlabel,Joptionpane,Imageicon,我正在学习java swing。下面的代码是一个catch块,用于处理IOException并显示错误消息 catch(IOException e) { System.out.println("IOException"); JOptionPane.showMessageDialog(null,"File not found",null, JOptionPane.ERROR_MESSA

我正在学习java swing。下面的代码是一个catch块,用于处理IOException并显示错误消息

 catch(IOException e)
    {
        System.out.println("IOException");
        JOptionPane.showMessageDialog(null,"File not found",null,
                                    JOptionPane.ERROR_MESSAGE);
    }
我正在考虑在catch块中声明和自定义我自己的JOptionPane,如下代码所示:

JOptionPane jop=new JOptionPane();
        jop.setLayout(new BorderLayout());
        JLabel im=new JLabel("Java Technology Dive Log",
                new ImageIcon("images/gwhite.gif"),JLabel.CENTER);
        jop.add(im,BorderLayout.NORTH);
        jop.setVisible(true);
但问题是我不知道如何让它像showMessageDialogue方法那样出现在屏幕上。请帮忙。
提前谢谢

我想这取决于
JOptionPaneshowMessageDialog(组件父组件、对象消息、字符串标题、int-messageType、图标图标)的问题。


您只需将组件添加到
JPanel
中,然后将此
JPanel
添加到
作业窗格
,如以下小示例所示:

import java.awt.*;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.*;
import javax.imageio.ImageIO;

public class JOptionPaneExample {

    private void displayGUI() {
        JOptionPane.showConfirmDialog(null,
                        getPanel(),
                        "JOptionPane Example : ",
                        JOptionPane.OK_CANCEL_OPTION,
                        JOptionPane.PLAIN_MESSAGE);
    }

    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);
        panel.add(label);

        return panel;
    }

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

为什么不使用内置JPanel等的JWindow?如果你是定制它很多,那么它不是很多努力做每件事自己。然后是完整的controlshowConfirmDialog,这就是我要寻找的方法。再次感谢。不客气,请保持微笑:-)。你真的可以将你的
JPanel
添加到
JOptionPane
的任何方法中,并对
布局做任何你想做的事情以满足你的需要:-)使用
getPanel
方法,如果我使用inputDialog、messageDialog或confirmDialog,会有什么不同吗?@Patrick:实际上是不同,将是默认组件,每种形式的
JOptionPane
,如
messageDialog
,默认情况下都会提供一个单独的按钮
OK
inputDialog`将提供一个
JTextField
Ok
CANCEL
按钮。根据一个人的用例的需求,您似乎可以选择最适合需求的一个。只需对所有的
JOptionPane
s、
JOptionPane.show“Message/Input/Confirm”对话框(null,getPanel())
使用通用方法,这将给出一个想法。你必须惊叹于盲目投票。你能告诉我为什么你觉得有必要否决投票,这样我们就可以知道为什么这个问题不适合你了吗?我很想知道这个答案有什么问题,一句话就可以满足op的要求
JOptionPane jop = new JOptionPane();
JDialog dialog = jop.createDialog("File not found");
dialog.setLayout(new BorderLayout());
JLabel im = new JLabel("Java Technology Dive Log", new ImageIcon("images/gwhite.gif"), JLabel.CENTER);
dialog.add(im, BorderLayout.NORTH);
dialog.setVisible(true);
import java.awt.*;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.*;
import javax.imageio.ImageIO;

public class JOptionPaneExample {

    private void displayGUI() {
        JOptionPane.showConfirmDialog(null,
                        getPanel(),
                        "JOptionPane Example : ",
                        JOptionPane.OK_CANCEL_OPTION,
                        JOptionPane.PLAIN_MESSAGE);
    }

    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);
        panel.add(label);

        return panel;
    }

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