Package com.valhalla.gui

Source Code of com.valhalla.gui.NMOptionDialog$ButtonListener

/*
*  Copyright (C) 2003 Adam Olsen
*  This program is free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 1, or (at your option)
*  any later version.
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software
*  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package com.valhalla.gui;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.Hashtable;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.UIManager;

/**
* This class allows for the creation of a non-modal option dialog
*
* @author Adam Olsen
* @created October 22, 2004
* @version 1.0
*/
public class NMOptionDialog extends JDialog {
    private JPanel mainPanel;

    private ArrayList listeners = new ArrayList();

    private JPanel buttonPanel = new JPanel();

    private ButtonListener listener = new ButtonListener();

    private Hashtable buttons = new Hashtable();

    /**
     * Information type
     */
    public static final int INFORMATION = 1;

    /**
     * warning type
     */
    public static final int WARNING = 2;

    /**
     * question type
     */
    public static final int QUESTION = 3;

    /**
     * error type
     */
    public static final int ERROR = 4;

    /**
     * Creates the non-modal option dialog
     *
     * @param parent
     *            the dialog's parent
     * @param title
     *            the text to use in the title bar of the dialog
     * @param message
     *            the message to display in the dialog's JLabel
     * @param icon
     *            the icon to display in the icon section
     */
    public NMOptionDialog(JFrame parent, String title, String message, int icon) {
        super(parent, title);
        mainPanel = (JPanel) getContentPane();
        mainPanel.setLayout(new BorderLayout());

        message = message.replaceAll("\n", "<br>");
        JLabel messageLabel = new JLabel("<html>" + message + "</html>",
                SwingConstants.CENTER);
        messageLabel.setBorder(BorderFactory.createEmptyBorder(5, 15, 5, 15));
        mainPanel.add(messageLabel, BorderLayout.CENTER);
        mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        JPanel bottomPanel = new JPanel();
        bottomPanel.setLayout(new BoxLayout(bottomPanel, BoxLayout.X_AXIS));
        bottomPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        bottomPanel.add(Box.createHorizontalGlue());
        bottomPanel.add(buttonPanel);
        bottomPanel.add(Box.createHorizontalGlue());

        buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));

        mainPanel.add(bottomPanel, BorderLayout.SOUTH);
        JLabel iconLabel = new JLabel(getIconFromNum(icon));
        iconLabel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 5));
        mainPanel.add(iconLabel, BorderLayout.WEST);

        pack();
        setLocationRelativeTo(null);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
            }
        });
    }

    /**
     * Constructor that creates an NMOptionDialog with an Information icon
     *
     * @param parent
     *            the dialog's parent
     * @param title
     *            the text to use in the title bar of the dialog
     * @param message
     *            the message to display in the dialog's JLabel
     */
    public NMOptionDialog(JFrame parent, String title, String message) {
        this(parent, title, message, INFORMATION);
    }

    /**
     * Returns the icon corresponding to the number value
     *
     * @param num
     *            the number of the icon to get
     * @return the icon corresponding to the specified number
     */
    public Icon getIconFromNum(int num) {
        String name = "OptionPane.";
        if (num == ERROR) {
            name += "error";
        } else if (num == INFORMATION) {
            name += "information";
        } else if (num == WARNING) {
            name += "warning";
        } else if (num == QUESTION) {
            name += "question";
        }

        name += "Icon";

        return UIManager.getIcon(name);
    }

    /**
     * Creates a message dialog with only an "OK" button
     *
     * @param parent
     *            the dialog' parent
     * @param title
     *            the text to use in the title bar of the dialog
     * @param message
     *            the message to display in the dialog's label
     * @return a NMOptionDialog with only an OK button
     */
    public static NMOptionDialog createMessageDialog(JFrame parent,
            String title, String message) {
        NMOptionDialog d = new NMOptionDialog(parent, title, message,
                INFORMATION);
        d.addButton("OK", 1);
        d.setVisible(true);
        return d;
    }

    /**
     * Adds a button to the dialog
     *
     * @param text
     *            the text to put on the button
     * @param num
     *            the number of the button
     */
    public void addButton(String text, int num) {
        JButton button = new JButton(text);
        buttonPanel.add(button);
        button.addActionListener(listener);
        pack();
        validate();
        repaint();

        buttons.put(text, new Integer(num));
    }

    /**
     * Adds a listener to this dialog
     *
     * @param l
     *            The feature to be added to the OptionListener attribute
     */
    public void addOptionListener(NMOptionListener l) {
        listeners.add(l);
    }

    /**
     * Called by the NMOption panel buttons
     *
     * @author synic
     * @created October 22, 2004
     */
    class ButtonListener implements ActionListener {
        /**
         * Called by the NMOption panel buttons
         *
         * @param e
         *            the event
         */
        public void actionPerformed(ActionEvent e) {
            JButton button = (JButton) e.getSource();
            String name = button.getText();
            Integer num = (Integer) buttons.get(name);

            for (int i = 0; i < listeners.size(); i++) {
                NMOptionListener l = (NMOptionListener) listeners.get(i);
                l.buttonClicked(num.intValue());
            }

            dispose();
        }
    }
}
TOP

Related Classes of com.valhalla.gui.NMOptionDialog$ButtonListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.