1 |
alfonx |
434 |
package skrueger.swing; |
2 |
|
|
|
3 |
|
|
import java.awt.Component; |
4 |
|
|
import java.awt.event.ActionEvent; |
5 |
|
|
|
6 |
|
|
import javax.swing.AbstractAction; |
7 |
|
|
import javax.swing.Action; |
8 |
|
|
import javax.swing.Icon; |
9 |
|
|
import javax.swing.JTabbedPane; |
10 |
|
|
|
11 |
|
|
import net.miginfocom.swing.MigLayout; |
12 |
|
|
import schmitzm.swing.JPanel; |
13 |
|
|
import schmitzm.swing.SwingUtil; |
14 |
|
|
|
15 |
|
|
public abstract class CancellableTabbedDialogAdapter extends |
16 |
|
|
CancellableDialogAdapter { |
17 |
|
|
|
18 |
|
|
private final JTabbedPane tabbedPane; |
19 |
|
|
|
20 |
|
|
public CancellableTabbedDialogAdapter(Component owner) { |
21 |
|
|
super(owner); |
22 |
|
|
|
23 |
|
|
/** |
24 |
|
|
* Prepare buttons |
25 |
|
|
*/ |
26 |
|
|
final JPanel buttons = createButtons(); |
27 |
|
|
|
28 |
|
|
/*** Build GUI ***/ |
29 |
|
|
tabbedPane = new JTabbedPane(){ |
30 |
|
|
@Override |
31 |
|
|
public void insertTab(String title, Icon icon, Component component, |
32 |
|
|
String tip, int index) { |
33 |
|
|
super.insertTab(title, icon, component, tip, index); |
34 |
|
|
CancellableTabbedDialogAdapter.this.pack(); |
35 |
|
|
} |
36 |
|
|
}; |
37 |
|
|
|
38 |
|
|
/** |
39 |
|
|
* Building the content pane |
40 |
|
|
*/ |
41 |
|
|
final JPanel contentPane = new JPanel(new MigLayout("wrap 1")); |
42 |
|
|
contentPane.add(getTabbedPane()); |
43 |
|
|
contentPane.add(buttons); |
44 |
|
|
|
45 |
|
|
setContentPane(contentPane); |
46 |
|
|
SwingUtil.centerFrameOnScreen(this); |
47 |
|
|
|
48 |
|
|
} |
49 |
|
|
|
50 |
|
|
/** |
51 |
|
|
* Is only called once! Doesn't use lazy initialization. Use |
52 |
|
|
* <code>super.createButtons.add( newButton )</code> to add buttons. |
53 |
|
|
* |
54 |
|
|
* @return |
55 |
|
|
*/ |
56 |
|
|
protected JPanel createButtons() { |
57 |
|
|
final JPanel buttonsJPanel = new JPanel(new MigLayout("width 100%")); |
58 |
|
|
|
59 |
|
|
final OkButton okButton = new OkButton(new AbstractAction() { |
60 |
|
|
{ |
61 |
|
|
// Set a mnemonic character. In most look and feels, this |
62 |
|
|
// causes the |
63 |
|
|
// specified character to be underlined This indicates that |
64 |
|
|
// if the component |
65 |
|
|
// using this action has the focus and In some look and |
66 |
|
|
// feels, this causes |
67 |
|
|
// the specified character in the label to be underlined and |
68 |
|
|
putValue(Action.MNEMONIC_KEY, new Integer( |
69 |
|
|
java.awt.event.KeyEvent.VK_E)); |
70 |
|
|
|
71 |
|
|
// Set tool tip text |
72 |
|
|
putValue(Action.SHORT_DESCRIPTION, |
73 |
|
|
"Accept the changes made in this dialog."); // i8n |
74 |
|
|
|
75 |
|
|
} |
76 |
|
|
|
77 |
|
|
// |
78 |
|
|
public void actionPerformed(final ActionEvent evt) { |
79 |
|
|
okClose(); |
80 |
|
|
} |
81 |
|
|
|
82 |
|
|
}); |
83 |
|
|
|
84 |
|
|
buttonsJPanel.add(okButton); |
85 |
|
|
|
86 |
|
|
final CancelButton cancelButton = new CancelButton(new AbstractAction( |
87 |
|
|
"") { |
88 |
|
|
public void actionPerformed(final ActionEvent evt) { |
89 |
|
|
cancelClose(); |
90 |
|
|
} |
91 |
|
|
}); |
92 |
|
|
buttonsJPanel.add(cancelButton); |
93 |
|
|
|
94 |
|
|
return buttonsJPanel; |
95 |
|
|
} |
96 |
|
|
|
97 |
|
|
public JTabbedPane getTabbedPane() { |
98 |
|
|
return tabbedPane; |
99 |
|
|
} |
100 |
|
|
|
101 |
|
|
/** |
102 |
|
|
* Calling cancel() will call cancel to all {@link Cancellable} children in the tabbedPane. |
103 |
|
|
*/ |
104 |
|
|
@Override |
105 |
|
|
public void cancel() { |
106 |
|
|
cancelled = true; |
107 |
|
|
|
108 |
|
|
for (int tIdx = 0; tIdx < tabbedPane.getTabCount(); tIdx++) { |
109 |
|
|
final Component tab = tabbedPane.getComponentAt(tIdx); |
110 |
|
|
if (tab instanceof Cancellable) { |
111 |
|
|
((Cancellable) tab).cancel(); |
112 |
|
|
} |
113 |
|
|
} |
114 |
|
|
} |
115 |
|
|
|
116 |
|
|
|
117 |
|
|
@Override |
118 |
|
|
public boolean okClose() { |
119 |
|
|
// TranslationAskJDialog.this.firePropertyChange( |
120 |
|
|
// PROPERTY_APPLY_AND_CLOSE, null, null); |
121 |
|
|
// |
122 |
|
|
for (int tIdx = 0; tIdx < tabbedPane.getTabCount(); tIdx++) { |
123 |
|
|
final Component tab = tabbedPane.getComponentAt(tIdx); |
124 |
|
|
if (tab instanceof Checkable) { |
125 |
|
|
if (!((Checkable) tab).checkValidInputs()) |
126 |
|
|
return false; |
127 |
|
|
} |
128 |
|
|
} |
129 |
|
|
|
130 |
|
|
dispose(); |
131 |
|
|
|
132 |
|
|
return true; |
133 |
|
|
} |
134 |
|
|
} |