/* * 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.*; import javax.swing.*; import open.dolphin.impl.scheam.schemahelper.SchemaTitleBorder; /** * SchemaCanvasEditor で使うカスタム dialog * @author pns */ public class SchemaCanvasDialog2 extends javax.swing.JDialog { private int result; private SchemaCanvasView parent; public SchemaCanvasDialog2(SchemaCanvasView parent, boolean modal) { super(parent, modal); this.parent = parent; initComponents(); initTitlePanel(); okBtn.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { result = JOptionPane.OK_OPTION; setVisible(false); dispose(); } }); cancelBtn.addActionListener(new ActionListener(){ @Override 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() { @Override public void actionPerformed(ActionEvent e) { okBtn.doClick(); } }); // ESC でキャンセル im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "cancel"); am.put("cancel", new AbstractAction() { @Override 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 */ @Override 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, 0, 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); java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("open/dolphin/impl/scheam/resources/SchemaCanvasDialog2"); // NOI18N cancelBtn.setText(bundle.getString("cancelBtn.text")); // NOI18N 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, javax.swing.GroupLayout.DEFAULT_SIZE, 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() { @Override public void run() { SchemaCanvasDialog2 dialog = new SchemaCanvasDialog2(new SchemaCanvasView(), true); dialog.addWindowListener(new java.awt.event.WindowAdapter() { @Override 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 }