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