Package shared.dialog

Source Code of shared.dialog.JModalDialog

/*
* JModalDialog.java
*
* Created on 06.11.2008 17:02:12
*
*  Copyright (C) <reiner>
*  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 2 of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA

* @author reiner
*/


package shared.dialog;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Desktop.Action;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

/**
*
*/
public abstract class JModalDialog extends JDialog
{
    private boolean m_bOk = false;
    private JPanel m_okCancelPanel;
    private JFrame m_frame;
    private AbstractAction m_cancelAction;
    private AbstractAction m_applyAction;
   
    public JModalDialog(JFrame frame, String caption, String okStr, String cancelStr, String applyStr, int topSpace)
    {
        super(frame, caption, true);
        doInit(frame, caption, okStr, cancelStr, applyStr, topSpace);
    }

    public JModalDialog(JFrame frame, String caption, String okStr, String cancelStr, int topSpace)
    {
        super(frame, caption, true);
        doInit(frame, caption, okStr, cancelStr, null, topSpace);
    }

    public JModalDialog(JFrame frame, String caption, String okStr, String cancelStr, String applyStr)
    {
        super(frame, caption, true);
        doInit(frame, caption, okStr, cancelStr, applyStr, 10);
    }

    public JModalDialog(JFrame frame, String caption, String okStr, String cancelStr)
    {
        super(frame, caption, true);
        doInit(frame, caption, okStr, cancelStr, null, 10);
    }

    protected void doApply()
    {}

    protected void doInit(JFrame frame, String caption, String okStr, String cancelStr, String applyStr, int topSpace)
    {
        m_frame = frame;
    Container contentPane = getContentPane();
        contentPane.setLayout(new BorderLayout());
        m_okCancelPanel = new JPanel();

        m_okCancelPanel.setLayout(new BoxLayout(m_okCancelPanel, BoxLayout.X_AXIS));
        m_okCancelPanel.setBorder(BorderFactory.createEmptyBorder(topSpace, 0, 10, 10));
        m_okCancelPanel.add(Box.createHorizontalGlue());
        if (applyStr != null)
        {
            JButton apply = new JButton(applyStr);
            m_applyAction = new AbstractAction()
            {
                public void actionPerformed(ActionEvent ev)
                {
                    doApply();
                }
            };
            apply.addActionListener(m_applyAction);
            Dimension dim = apply.getPreferredSize();
            apply.setPreferredSize(new Dimension(100, (int)dim.getHeight()));
            m_okCancelPanel.add(apply);
            m_okCancelPanel.add(Box.createRigidArea(new Dimension(5, 0)));
        }
        if (okStr != null && cancelStr != null)
        {
            JButton ok = new JButton(okStr);
            ok.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent ev)
                {
                    if (doGetData())
                    {
                        m_bOk = true;
                        dispose();
                    }
                }
            });
            getRootPane().setDefaultButton(ok);
            Dimension dim = ok.getPreferredSize();
            ok.setPreferredSize(new Dimension(100, (int)dim.getHeight()));
            m_okCancelPanel.add(ok);
            m_okCancelPanel.add(Box.createRigidArea(new Dimension(5, 0)));
            JButton cancel = new JButton(cancelStr);
            m_cancelAction = new AbstractAction()
            {
                public void actionPerformed(ActionEvent ev)
                {
                    dispose();
                }
            };
            cancel.addActionListener(m_cancelAction);
            cancel.setPreferredSize(ok.getPreferredSize());
            m_okCancelPanel.add(cancel);

            InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
            inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "ESCAPE");
            getRootPane().getActionMap().put("ESCAPE", m_cancelAction);
        }
        else if (okStr != null)
        {
            JButton ok = new JButton(okStr);
            ok.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent ev)
                {
                    if (doGetData())
                    {
                        m_bOk = true;
                        dispose();
                    }
                }
            });
            getRootPane().setDefaultButton(ok);
            Dimension dim = ok.getPreferredSize();
            ok.setPreferredSize(new Dimension(100, (int)dim.getHeight()));
            m_okCancelPanel.add(ok);
        }
        else if (cancelStr != null)
        {
            JButton cancel = new JButton(cancelStr);
            m_cancelAction = new AbstractAction()
            {
                public void actionPerformed(ActionEvent ev)
                {
                    dispose();
                }
            };
            cancel.addActionListener(m_cancelAction);
            Dimension dim = cancel.getPreferredSize();
            cancel.setPreferredSize(new Dimension(100, (int)dim.getHeight()));
            m_okCancelPanel.add(cancel);

            InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
            inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "ESCAPE");
            getRootPane().getActionMap().put("ESCAPE", m_cancelAction);
        }
        contentPane.add(m_okCancelPanel, BorderLayout.SOUTH);
        pack();
    }

   
    public void addCtrlPanel(JPanel panel)
    {
    Container contentPane = getContentPane();
        contentPane.add(panel, BorderLayout.CENTER);
       
        if (m_frame != null)
            setLocationRelativeTo(m_frame);
        pack();
    }
   
    public boolean doModal()
    {
        doInit();
    setVisible(true);
        return m_bOk;
    }

    /**
     * @return true if data are valid, else false
     */
  protected abstract boolean doGetData();
  protected abstract void doInit();
}
TOP

Related Classes of shared.dialog.JModalDialog

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.