KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > taskblocks > app > ConfigDialogStub


1 /*
2  * Copyright (C) Jakub Neubauer, 2007
3  *
4  * This file is part of TaskBlocks
5  *
6  * TaskBlocks is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * TaskBlocks is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  */

19
20 package taskblocks.app;
21
22 import java.awt.BorderLayout JavaDoc;
23 import java.awt.Dimension JavaDoc;
24 import java.awt.event.ActionEvent JavaDoc;
25 import java.awt.event.KeyEvent JavaDoc;
26 import java.awt.event.WindowAdapter JavaDoc;
27 import java.awt.event.WindowEvent JavaDoc;
28
29 import javax.swing.AbstractAction JavaDoc;
30 import javax.swing.BorderFactory JavaDoc;
31 import javax.swing.Box JavaDoc;
32 import javax.swing.InputMap JavaDoc;
33 import javax.swing.JButton JavaDoc;
34 import javax.swing.JCheckBox JavaDoc;
35 import javax.swing.JComponent JavaDoc;
36 import javax.swing.JDialog JavaDoc;
37 import javax.swing.JFrame JavaDoc;
38 import javax.swing.JPanel JavaDoc;
39 import javax.swing.JRootPane JavaDoc;
40 import javax.swing.KeyStroke JavaDoc;
41 import javax.swing.Box.Filler;
42
43 public abstract class ConfigDialogStub extends JDialog JavaDoc {
44     
45     boolean _applied;
46     
47     JButton JavaDoc okB;
48     JButton JavaDoc cancelB;
49     boolean _isCreating;
50     JCheckBox JavaDoc _stayOpenCB;
51
52     private JPanel JavaDoc _mainPanel;
53
54     private AbstractAction JavaDoc _okAction;
55     private AbstractAction JavaDoc _cancelAction;
56     
57     public ConfigDialogStub(JFrame JavaDoc 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 JavaDoc createMainPanel();
68
69     private void buildGui() {
70         
71         // create components
72
JPanel JavaDoc mainP = new JPanel JavaDoc(new BorderLayout JavaDoc(0, 20));
73         Box JavaDoc butP = Box.createHorizontalBox();
74         okB = new JButton JavaDoc(_okAction);
75         cancelB = new JButton JavaDoc(_cancelAction);
76         _mainPanel = createMainPanel();
77         
78         //layout components
79
if(_isCreating) {
80             _stayOpenCB = new JCheckBox JavaDoc("Don't close this dialog");
81             _stayOpenCB.setSelected(false);
82             butP.add(_stayOpenCB);
83             butP.add(new Filler(new Dimension JavaDoc(0,0), new Dimension JavaDoc(30,0),
84                     new Dimension JavaDoc(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 JavaDoc(){
99             public void windowClosing(WindowEvent JavaDoc 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     /**
112      * Sets <code>CloseWindow</code> action for key Escape and <code>SaveWindow</code> action for
113      * key Enter.
114      *
115      * @param rootPane
116      */

117     private void setDefaultActions(JRootPane JavaDoc rootPane) {
118         KeyStroke JavaDoc strokeEsc = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
119         KeyStroke JavaDoc strokeEnter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
120
121         InputMap JavaDoc 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 JavaDoc("Cancel"){
130             public void actionPerformed(ActionEvent JavaDoc e) {
131                 dispose();
132             }};
133             
134         _okAction = new AbstractAction JavaDoc(_isCreating ? "Create" : "OK"){
135             public void actionPerformed(ActionEvent JavaDoc 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