jtulach@218
|
1 |
package org.apidesign.anagram.gui;
|
jtulach@218
|
2 |
|
jtulach@218
|
3 |
import org.apidesign.anagram.api.Scrambler;
|
jtulach@218
|
4 |
import org.apidesign.anagram.api.UI;
|
jtulach@218
|
5 |
import org.apidesign.anagram.api.WordLibrary;
|
jtulach@218
|
6 |
|
jtulach@218
|
7 |
/** Modified version of classical NetBeans Anagrams example for purposes
|
jtulach@218
|
8 |
* of modular world.
|
jtulach@218
|
9 |
*
|
jtulach@218
|
10 |
* @author Dirk Ruiz, Jaroslav Tulach
|
jtulach@218
|
11 |
*/
|
jtulach@233
|
12 |
// BEGIN: anagram.ui.Anagrams
|
jtulach@218
|
13 |
public abstract class Anagrams extends javax.swing.JFrame implements UI {
|
jtulach@218
|
14 |
public Anagrams() {
|
jtulach@218
|
15 |
initComponents();
|
jtulach@218
|
16 |
getRootPane().setDefaultButton(guessButton);
|
jtulach@246
|
17 |
|
jtulach@246
|
18 |
String version = System.getProperty("anagram.version");
|
jtulach@246
|
19 |
if (version != null) {
|
jtulach@246
|
20 |
if (version.startsWith("app-")) {
|
jtulach@246
|
21 |
version = version.substring(4);
|
jtulach@246
|
22 |
}
|
jtulach@246
|
23 |
setTitle("Anagrams - " + version + " version");
|
jtulach@246
|
24 |
}
|
jtulach@218
|
25 |
}
|
jtulach@218
|
26 |
|
jtulach@218
|
27 |
protected abstract WordLibrary getWordLibrary();
|
jtulach@218
|
28 |
protected abstract Scrambler getScrambler();
|
jtulach@218
|
29 |
|
jtulach@220
|
30 |
public void display() {
|
jtulach@249
|
31 |
initWord();
|
jtulach@220
|
32 |
setVisible(true);
|
jtulach@220
|
33 |
}
|
jtulach@233
|
34 |
// FINISH: anagram.ui.Anagrams
|
jtulach@233
|
35 |
int wordIdx = 0;
|
jtulach@233
|
36 |
String original;
|
jtulach@233
|
37 |
String scrambled;
|
jtulach@220
|
38 |
|
jtulach@249
|
39 |
public final String getOriginalWord() {
|
jtulach@249
|
40 |
return original;
|
jtulach@249
|
41 |
}
|
jtulach@249
|
42 |
|
jtulach@249
|
43 |
public final String getScrambledWord() {
|
jtulach@249
|
44 |
return scrambled;
|
jtulach@219
|
45 |
}
|
jtulach@219
|
46 |
|
jtulach@218
|
47 |
/** This method is called from within the constructor to
|
jtulach@218
|
48 |
* initialize the form.
|
jtulach@218
|
49 |
* WARNING: Do NOT modify this code. The content of this method is
|
jtulach@218
|
50 |
* always regenerated by the Form Editor.
|
jtulach@218
|
51 |
*/
|
jtulach@218
|
52 |
private void initComponents() {//GEN-BEGIN:initComponents
|
jtulach@218
|
53 |
java.awt.GridBagConstraints gridBagConstraints;
|
jtulach@218
|
54 |
|
jtulach@218
|
55 |
mainPanel = new javax.swing.JPanel();
|
jtulach@218
|
56 |
scrambledLabel = new javax.swing.JLabel();
|
jtulach@218
|
57 |
guessLabel = new javax.swing.JLabel();
|
jtulach@218
|
58 |
feedbackLabel = new javax.swing.JLabel();
|
jtulach@218
|
59 |
guessButton = new javax.swing.JButton();
|
jtulach@218
|
60 |
scrambledWord = new javax.swing.JTextField();
|
jtulach@218
|
61 |
guessedWord = new javax.swing.JTextField();
|
jtulach@218
|
62 |
nextTrial = new javax.swing.JButton();
|
jtulach@218
|
63 |
mainMenu = new javax.swing.JMenuBar();
|
jtulach@218
|
64 |
File = new javax.swing.JMenu();
|
jtulach@218
|
65 |
jMenuItem1 = new javax.swing.JMenuItem();
|
jtulach@218
|
66 |
jMenuItem2 = new javax.swing.JMenuItem();
|
jtulach@218
|
67 |
|
jtulach@218
|
68 |
setTitle("Anagrams");
|
jtulach@218
|
69 |
addWindowListener(new java.awt.event.WindowAdapter() {
|
jtulach@218
|
70 |
public void windowClosing(java.awt.event.WindowEvent evt) {
|
jtulach@218
|
71 |
exitForm(evt);
|
jtulach@218
|
72 |
}
|
jtulach@218
|
73 |
});
|
jtulach@218
|
74 |
|
jtulach@218
|
75 |
mainPanel.setLayout(new java.awt.GridBagLayout());
|
jtulach@218
|
76 |
|
jtulach@218
|
77 |
mainPanel.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(11, 11, 12, 12)));
|
jtulach@218
|
78 |
mainPanel.setMinimumSize(new java.awt.Dimension(297, 200));
|
jtulach@218
|
79 |
mainPanel.setPreferredSize(new java.awt.Dimension(297, 200));
|
jtulach@218
|
80 |
scrambledLabel.setText("Scrambled Word:");
|
jtulach@218
|
81 |
gridBagConstraints = new java.awt.GridBagConstraints();
|
jtulach@218
|
82 |
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
|
jtulach@218
|
83 |
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
|
jtulach@218
|
84 |
gridBagConstraints.insets = new java.awt.Insets(12, 12, 12, 6);
|
jtulach@218
|
85 |
mainPanel.add(scrambledLabel, gridBagConstraints);
|
jtulach@218
|
86 |
|
jtulach@218
|
87 |
guessLabel.setText("Your Guess:");
|
jtulach@218
|
88 |
gridBagConstraints = new java.awt.GridBagConstraints();
|
jtulach@218
|
89 |
gridBagConstraints.gridx = 0;
|
jtulach@218
|
90 |
gridBagConstraints.gridy = 1;
|
jtulach@218
|
91 |
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
|
jtulach@218
|
92 |
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
|
jtulach@218
|
93 |
gridBagConstraints.insets = new java.awt.Insets(0, 12, 12, 6);
|
jtulach@218
|
94 |
mainPanel.add(guessLabel, gridBagConstraints);
|
jtulach@218
|
95 |
|
jtulach@218
|
96 |
feedbackLabel.setText(" ");
|
jtulach@218
|
97 |
gridBagConstraints = new java.awt.GridBagConstraints();
|
jtulach@218
|
98 |
gridBagConstraints.gridx = 1;
|
jtulach@218
|
99 |
gridBagConstraints.gridy = 2;
|
jtulach@218
|
100 |
gridBagConstraints.gridwidth = 2;
|
jtulach@218
|
101 |
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
|
jtulach@218
|
102 |
gridBagConstraints.weightx = 1.0;
|
jtulach@218
|
103 |
gridBagConstraints.insets = new java.awt.Insets(0, 0, 6, 6);
|
jtulach@218
|
104 |
mainPanel.add(feedbackLabel, gridBagConstraints);
|
jtulach@218
|
105 |
|
jtulach@218
|
106 |
guessButton.setMnemonic('G');
|
jtulach@218
|
107 |
guessButton.setText("Guess");
|
jtulach@218
|
108 |
guessButton.setToolTipText("Guess the scrambled word.");
|
jtulach@218
|
109 |
guessButton.addActionListener(new java.awt.event.ActionListener() {
|
jtulach@218
|
110 |
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
jtulach@218
|
111 |
guessedWordActionPerformed(evt);
|
jtulach@218
|
112 |
}
|
jtulach@218
|
113 |
});
|
jtulach@218
|
114 |
|
jtulach@218
|
115 |
gridBagConstraints = new java.awt.GridBagConstraints();
|
jtulach@218
|
116 |
gridBagConstraints.gridx = 2;
|
jtulach@218
|
117 |
gridBagConstraints.gridy = 3;
|
jtulach@218
|
118 |
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
|
jtulach@218
|
119 |
gridBagConstraints.insets = new java.awt.Insets(0, 0, 11, 6);
|
jtulach@218
|
120 |
mainPanel.add(guessButton, gridBagConstraints);
|
jtulach@218
|
121 |
|
jtulach@218
|
122 |
scrambledWord.setEditable(false);
|
jtulach@218
|
123 |
gridBagConstraints = new java.awt.GridBagConstraints();
|
jtulach@218
|
124 |
gridBagConstraints.gridwidth = 3;
|
jtulach@218
|
125 |
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
|
jtulach@218
|
126 |
gridBagConstraints.weightx = 1.0;
|
jtulach@218
|
127 |
gridBagConstraints.insets = new java.awt.Insets(12, 0, 12, 11);
|
jtulach@218
|
128 |
mainPanel.add(scrambledWord, gridBagConstraints);
|
jtulach@218
|
129 |
|
jtulach@218
|
130 |
gridBagConstraints = new java.awt.GridBagConstraints();
|
jtulach@218
|
131 |
gridBagConstraints.gridx = 1;
|
jtulach@218
|
132 |
gridBagConstraints.gridy = 1;
|
jtulach@218
|
133 |
gridBagConstraints.gridwidth = 3;
|
jtulach@218
|
134 |
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
|
jtulach@218
|
135 |
gridBagConstraints.weightx = 1.0;
|
jtulach@218
|
136 |
gridBagConstraints.insets = new java.awt.Insets(0, 0, 12, 11);
|
jtulach@218
|
137 |
mainPanel.add(guessedWord, gridBagConstraints);
|
jtulach@218
|
138 |
|
jtulach@218
|
139 |
nextTrial.setMnemonic('N');
|
jtulach@218
|
140 |
nextTrial.setText("New Word");
|
jtulach@218
|
141 |
nextTrial.setToolTipText("Fetch a new word.");
|
jtulach@218
|
142 |
nextTrial.addActionListener(new java.awt.event.ActionListener() {
|
jtulach@218
|
143 |
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
jtulach@218
|
144 |
nextTrialActionPerformed(evt);
|
jtulach@218
|
145 |
}
|
jtulach@218
|
146 |
});
|
jtulach@218
|
147 |
|
jtulach@218
|
148 |
gridBagConstraints = new java.awt.GridBagConstraints();
|
jtulach@218
|
149 |
gridBagConstraints.gridx = 3;
|
jtulach@218
|
150 |
gridBagConstraints.gridy = 3;
|
jtulach@218
|
151 |
gridBagConstraints.insets = new java.awt.Insets(0, 0, 11, 11);
|
jtulach@218
|
152 |
mainPanel.add(nextTrial, gridBagConstraints);
|
jtulach@218
|
153 |
|
jtulach@218
|
154 |
getContentPane().add(mainPanel, java.awt.BorderLayout.CENTER);
|
jtulach@218
|
155 |
|
jtulach@218
|
156 |
File.setText("File");
|
jtulach@218
|
157 |
jMenuItem1.setText("About");
|
jtulach@218
|
158 |
jMenuItem1.setToolTipText("About");
|
jtulach@218
|
159 |
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
|
jtulach@218
|
160 |
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
jtulach@218
|
161 |
jMenuItem1ActionPerformed(evt);
|
jtulach@218
|
162 |
}
|
jtulach@218
|
163 |
});
|
jtulach@218
|
164 |
|
jtulach@218
|
165 |
File.add(jMenuItem1);
|
jtulach@218
|
166 |
|
jtulach@218
|
167 |
jMenuItem2.setText("Exit");
|
jtulach@218
|
168 |
jMenuItem2.setToolTipText("Quit Team, Quit!");
|
jtulach@218
|
169 |
jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
|
jtulach@218
|
170 |
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
jtulach@218
|
171 |
jMenuItem2ActionPerformed(evt);
|
jtulach@218
|
172 |
}
|
jtulach@218
|
173 |
});
|
jtulach@218
|
174 |
|
jtulach@218
|
175 |
File.add(jMenuItem2);
|
jtulach@218
|
176 |
|
jtulach@218
|
177 |
mainMenu.add(File);
|
jtulach@218
|
178 |
|
jtulach@218
|
179 |
setJMenuBar(mainMenu);
|
jtulach@218
|
180 |
|
jtulach@218
|
181 |
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
|
jtulach@218
|
182 |
setBounds((screenSize.width-400)/2, (screenSize.height-250)/2, 400, 250);
|
jtulach@218
|
183 |
}//GEN-END:initComponents
|
jtulach@218
|
184 |
|
jtulach@218
|
185 |
private void nextTrialActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextTrialActionPerformed
|
jtulach@218
|
186 |
wordIdx++;
|
jtulach@218
|
187 |
|
jtulach@218
|
188 |
feedbackLabel.setText(" ");
|
jtulach@218
|
189 |
initWord();
|
jtulach@218
|
190 |
guessedWord.setText("");
|
jtulach@218
|
191 |
getRootPane().setDefaultButton(guessButton);
|
jtulach@218
|
192 |
|
jtulach@218
|
193 |
guessedWord.requestFocus();
|
jtulach@218
|
194 |
}//GEN-LAST:event_nextTrialActionPerformed
|
jtulach@218
|
195 |
|
jtulach@249
|
196 |
protected final void initWord() {
|
jtulach@218
|
197 |
|
jtulach@218
|
198 |
String[] words = getWordLibrary().getWords();
|
jtulach@218
|
199 |
int index = wordIdx % words.length;
|
jtulach@218
|
200 |
|
jtulach@218
|
201 |
original = words[index];
|
jtulach@218
|
202 |
scrambled = getScrambler().scramble(original);
|
jtulach@218
|
203 |
|
jtulach@218
|
204 |
scrambledWord.setText(scrambled);
|
jtulach@218
|
205 |
}
|
jtulach@218
|
206 |
|
jtulach@218
|
207 |
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed
|
jtulach@218
|
208 |
System.exit(0);
|
jtulach@218
|
209 |
}//GEN-LAST:event_jMenuItem2ActionPerformed
|
jtulach@218
|
210 |
|
jtulach@218
|
211 |
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
|
jtulach@218
|
212 |
new About().show();
|
jtulach@218
|
213 |
}//GEN-LAST:event_jMenuItem1ActionPerformed
|
jtulach@218
|
214 |
|
jtulach@218
|
215 |
private void guessedWordActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guessedWordActionPerformed
|
jtulach@218
|
216 |
|
jtulach@218
|
217 |
if(guessedWord.getText().equals(original)) {
|
jtulach@218
|
218 |
feedbackLabel.setText("Correct! Try a new word!");
|
jtulach@218
|
219 |
getRootPane().setDefaultButton(nextTrial);
|
jtulach@218
|
220 |
} else {
|
jtulach@218
|
221 |
feedbackLabel.setText("Incorrect! Try again!");
|
jtulach@218
|
222 |
guessedWord.setText("");
|
jtulach@218
|
223 |
}
|
jtulach@218
|
224 |
|
jtulach@218
|
225 |
guessedWord.requestFocus();
|
jtulach@218
|
226 |
}//GEN-LAST:event_guessedWordActionPerformed
|
jtulach@218
|
227 |
|
jtulach@218
|
228 |
/** Exit the Application */
|
jtulach@218
|
229 |
private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
|
jtulach@218
|
230 |
System.exit(0);
|
jtulach@218
|
231 |
}//GEN-LAST:event_exitForm
|
jtulach@218
|
232 |
|
jtulach@218
|
233 |
@Override
|
jtulach@218
|
234 |
public void setVisible(boolean v) {
|
jtulach@218
|
235 |
super.setVisible(v);
|
jtulach@218
|
236 |
if (v) {
|
jtulach@218
|
237 |
guessedWord.requestFocus();
|
jtulach@218
|
238 |
}
|
jtulach@218
|
239 |
}
|
jtulach@218
|
240 |
|
jtulach@218
|
241 |
// Variables declaration - do not modify//GEN-BEGIN:variables
|
jtulach@218
|
242 |
private javax.swing.JMenu File;
|
jtulach@218
|
243 |
private javax.swing.JLabel feedbackLabel;
|
jtulach@218
|
244 |
private javax.swing.JButton guessButton;
|
jtulach@218
|
245 |
private javax.swing.JLabel guessLabel;
|
jtulach@218
|
246 |
private javax.swing.JTextField guessedWord;
|
jtulach@218
|
247 |
private javax.swing.JMenuItem jMenuItem1;
|
jtulach@218
|
248 |
private javax.swing.JMenuItem jMenuItem2;
|
jtulach@218
|
249 |
private javax.swing.JMenuBar mainMenu;
|
jtulach@218
|
250 |
private javax.swing.JPanel mainPanel;
|
jtulach@218
|
251 |
private javax.swing.JButton nextTrial;
|
jtulach@218
|
252 |
private javax.swing.JLabel scrambledLabel;
|
jtulach@218
|
253 |
private javax.swing.JTextField scrambledWord;
|
jtulach@218
|
254 |
// End of variables declaration//GEN-END:variables
|
jtulach@218
|
255 |
|
jtulach@218
|
256 |
}
|