1 19 20 package taskblocks.app; 21 22 import java.awt.BorderLayout ; 23 import java.awt.Dimension ; 24 import java.awt.event.ActionEvent ; 25 import java.awt.event.KeyEvent ; 26 import java.awt.event.WindowAdapter ; 27 import java.awt.event.WindowEvent ; 28 29 import javax.swing.AbstractAction ; 30 import javax.swing.BorderFactory ; 31 import javax.swing.Box ; 32 import javax.swing.InputMap ; 33 import javax.swing.JButton ; 34 import javax.swing.JCheckBox ; 35 import javax.swing.JComponent ; 36 import javax.swing.JDialog ; 37 import javax.swing.JFrame ; 38 import javax.swing.JPanel ; 39 import javax.swing.JRootPane ; 40 import javax.swing.KeyStroke ; 41 import javax.swing.Box.Filler; 42 43 public abstract class ConfigDialogStub extends JDialog { 44 45 boolean _applied; 46 47 JButton okB; 48 JButton cancelB; 49 boolean _isCreating; 50 JCheckBox _stayOpenCB; 51 52 private JPanel _mainPanel; 53 54 private AbstractAction _okAction; 55 private AbstractAction _cancelAction; 56 57 public ConfigDialogStub(JFrame owner, boolean isCreating) { 58 super(owner, true); 59 _isCreating = isCreating; 60 } 61 62 public void init() { 63 createActions(); 64 buildGui(); 65 } 66 67 abstract JPanel createMainPanel(); 68 69 private void buildGui() { 70 71 JPanel mainP = new JPanel (new BorderLayout (0, 20)); 73 Box butP = Box.createHorizontalBox(); 74 okB = new JButton (_okAction); 75 cancelB = new JButton (_cancelAction); 76 _mainPanel = createMainPanel(); 77 78 if(_isCreating) { 80 _stayOpenCB = new JCheckBox ("Don't close this dialog"); 81 _stayOpenCB.setSelected(false); 82 butP.add(_stayOpenCB); 83 butP.add(new Filler(new Dimension (0,0), new Dimension (30,0), 84 new Dimension (Short.MAX_VALUE, 0)) 85 ); 86 } else { 87 butP.add(Box.createHorizontalGlue()); 88 } 89 butP.add(okB); 90 butP.add(Box.createHorizontalStrut(10)); 91 butP.add(cancelB); 92 mainP.add(butP, BorderLayout.SOUTH); 93 getContentPane().add(mainP); 94 mainP.add(_mainPanel, BorderLayout.CENTER); 95 96 mainP.setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); 97 98 this.addWindowListener(new WindowAdapter (){ 99 public void windowClosing(WindowEvent e) {dispose();} 100 }); 101 setDefaultActions(getRootPane()); 102 } 103 104 abstract void doApply(); 105 106 private void apply() { 107 doApply(); 108 _applied = true; 109 } 110 111 117 private void setDefaultActions(JRootPane rootPane) { 118 KeyStroke strokeEsc = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); 119 KeyStroke strokeEnter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); 120 121 InputMap inputMap = rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); 122 inputMap.put(strokeEsc, "ESCAPE"); 123 inputMap.put(strokeEnter, "ENTER"); 124 rootPane.getActionMap().put("ESCAPE", _cancelAction); 125 rootPane.getActionMap().put("ENTER", _okAction); 126 } 127 128 private void createActions() { 129 _cancelAction = new AbstractAction ("Cancel"){ 130 public void actionPerformed(ActionEvent e) { 131 dispose(); 132 }}; 133 134 _okAction = new AbstractAction (_isCreating ? "Create" : "OK"){ 135 public void actionPerformed(ActionEvent e) { 136 apply(); 137 if(_isCreating) { 138 if(!_stayOpenCB.isSelected()) { 139 dispose(); 140 } 141 } else { 142 dispose(); 143 } 144 } 145 }; 146 147 } 148 149 public boolean isCreating() { 150 return _isCreating; 151 } 152 } 153 | Popular Tags |