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