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