Search code examples
javaswingjlabeljoptionpaneimageicon

Customize JOptionPane Dialog


I am learning java swing. The code below is a catch block which handles an IOException and shows a error message.

 catch(IOException e)
    {
        System.out.println("IOException");
        JOptionPane.showMessageDialog(null,"File not found",null,
                                    JOptionPane.ERROR_MESSAGE);
    }

I was thinking of declaring and customizing a JOptionPane of my own inside the catch block like the code below:

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

But the problem is that I don't know how to make it appear on the screen as the showMessageDialogue method does. Please help. Thanks in advance.


Solution

  • You can simply add your components to a JPanel and then add this JPanel to your JOptionPane, as shown in this small example :

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