Package open.dolphin.impl.scheam

Source Code of open.dolphin.impl.scheam.SchemaCanvasDialog

/*
* SchemaCanvasDialog.java
*
* Created on 2011/02/15, 20:33:42
*/

package open.dolphin.impl.scheam;

import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import open.dolphin.impl.scheam.schemahelper.SchemaTitleBorder;

/**
* SchemaCanvasEditor で使うカスタム dialog
* @author pns
*/
public class SchemaCanvasDialog extends javax.swing.JDialog {

    private int result;
    private SchemaCanvasView parent;

    public SchemaCanvasDialog(SchemaCanvasView parent, boolean modal) {
        super(parent, modal);
        this.parent = parent;

        initComponents();
        initTitlePanel();

        okBtn.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                result = JOptionPane.OK_OPTION;
                setVisible(false);
                dispose();
            }
        });
        cancelBtn.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                result = JOptionPane.CANCEL_OPTION;
                setVisible(false);
                dispose();
            }
        });
        // ショートカット登録
        ActionMap am = getRootPane().getActionMap();
        InputMap im = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
        // Enter で OK
        im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "ok");
        am.put("ok", new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                okBtn.doClick();
            }
        });
        // ESC でキャンセル
        im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "cancel");
        am.put("cancel", new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                cancelBtn.doClick();
            }
        });
    }

    @Override
    public void setVisible(boolean b) {
        parent.setAlwaysOnTop(!b);
        //this.setLocationRelativeTo(parent);
        super.setVisible(b);
    }

    /**
     * JDialog を undecorated にして
     * titlePanel をつかんで移動できるようにする
     */
    private void initTitlePanel() {
        TitlePanelListener l = new TitlePanelListener();
        titlePanel.addMouseListener(l);
        titlePanel.addMouseMotionListener(l);
        titlePanel.setBorder(new SchemaTitleBorder());
        titleLbl.setText(SchemaEditorImpl.TITLE);
    }
    /**
     * titlePanel をつかんで移動させるためのリスナ
     */
    private class TitlePanelListener extends MouseAdapter {
        private Point from;

        @Override
        public void mousePressed(MouseEvent e) {
            from = e.getLocationOnScreen();
        }

        @Override
        public void mouseDragged(MouseEvent e) {
            Point to = e.getLocationOnScreen();

            int dx = to.x - from.x;
            int dy = to.y - from.y;

            Point p = getLocation();
            setLocation(new Point(p.x + dx, p.y + dy));

            from.x = to.x; from.y = to.y;
        }
    }

    /**
     * JPanel を登録して,大きさを調節する
     * @param panel
     */
    public void addContent(JPanel panel) {
        Dimension d = panel.getPreferredSize();
        contentPanel.add(panel);
        contentPanel.setPreferredSize(d);

        Rectangle r = parent.getBounds();
        int width = d.width + 10;
        int height = d.height + 60;
        int x = r.x + (r.width-width)/2;
        int y = r.y;
        this.setBounds(x, y, width, height);
    }

    /**
     * OK or Cancel を返す
     * @return
     */
    public int getResult() {
        return result;
    }

    /**
     * Dialog のタイトルを設定する
     * @param title
     */
    public void setTitle(String title) {
        titleLbl.setText(title);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        titlePanel = new javax.swing.JPanel();
        titleLbl = new javax.swing.JLabel();
        contentPanel = new javax.swing.JPanel();
        btnPanel = new javax.swing.JPanel();
        okBtn = new javax.swing.JButton();
        cancelBtn = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setName("Form"); // NOI18N
        setUndecorated(true);

        titlePanel.setName("titlePanel"); // NOI18N

        titleLbl.setFont(new java.awt.Font("Lucida Grande", 0, 9)); // NOI18N
        titleLbl.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        titleLbl.setText("TItle");
        titleLbl.setMaximumSize(new java.awt.Dimension(10000, 16));
        titleLbl.setMinimumSize(new java.awt.Dimension(72, 16));
        titleLbl.setName("titleLbl"); // NOI18N
        titleLbl.setPreferredSize(new java.awt.Dimension(72, 16));

        javax.swing.GroupLayout titlePanelLayout = new javax.swing.GroupLayout(titlePanel);
        titlePanel.setLayout(titlePanelLayout);
        titlePanelLayout.setHorizontalGroup(
            titlePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
            .addGroup(titlePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, titlePanelLayout.createSequentialGroup()
                    .addComponent(titleLbl, javax.swing.GroupLayout.DEFAULT_SIZE, 390, Short.MAX_VALUE)
                    .addContainerGap()))
        );
        titlePanelLayout.setVerticalGroup(
            titlePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 16, Short.MAX_VALUE)
            .addGroup(titlePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(titlePanelLayout.createSequentialGroup()
                    .addComponent(titleLbl, javax.swing.GroupLayout.DEFAULT_SIZE, 16, Short.MAX_VALUE)
                    .addContainerGap()))
        );

        contentPanel.setName("contentPanel"); // NOI18N
        contentPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0));

        btnPanel.setName("btnPanel"); // NOI18N

        okBtn.setText("OK");
        okBtn.setName("okBtn"); // NOI18N
        okBtn.setSelected(true);

        cancelBtn.setText("キャンセル");
        cancelBtn.setName("cancelBtn"); // NOI18N

        javax.swing.GroupLayout btnPanelLayout = new javax.swing.GroupLayout(btnPanel);
        btnPanel.setLayout(btnPanelLayout);
        btnPanelLayout.setHorizontalGroup(
            btnPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, btnPanelLayout.createSequentialGroup()
                .addContainerGap(193, Short.MAX_VALUE)
                .addComponent(cancelBtn)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(okBtn)
                .addContainerGap())
        );
        btnPanelLayout.setVerticalGroup(
            btnPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(btnPanelLayout.createSequentialGroup()
                .addGroup(btnPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(okBtn)
                    .addComponent(cancelBtn))
                .addContainerGap(9, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(titlePanel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(btnPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(contentPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(titlePanel, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(contentPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 237, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                SchemaCanvasDialog dialog = new SchemaCanvasDialog(new SchemaCanvasView(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel btnPanel;
    private javax.swing.JButton cancelBtn;
    private javax.swing.JPanel contentPanel;
    private javax.swing.JButton okBtn;
    private javax.swing.JLabel titleLbl;
    private javax.swing.JPanel titlePanel;
    // End of variables declaration//GEN-END:variables

}
TOP

Related Classes of open.dolphin.impl.scheam.SchemaCanvasDialog

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.