jtulach@218: package org.apidesign.anagram.gui; jtulach@218: jtulach@218: import org.apidesign.anagram.api.Scrambler; jtulach@218: import org.apidesign.anagram.api.UI; jtulach@218: import org.apidesign.anagram.api.WordLibrary; jtulach@218: jtulach@218: /** Modified version of classical NetBeans Anagrams example for purposes jtulach@218: * of modular world. jtulach@218: * jtulach@218: * @author Dirk Ruiz, Jaroslav Tulach jtulach@218: */ jtulach@233: // BEGIN: anagram.ui.Anagrams jtulach@218: public abstract class Anagrams extends javax.swing.JFrame implements UI { jtulach@255: jtulach@255: protected abstract WordLibrary getWordLibrary(); jtulach@255: protected abstract Scrambler getScrambler(); jtulach@255: jtulach@255: public void display() { jtulach@255: initWord(); jtulach@255: setVisible(true); jtulach@255: } jtulach@255: // FINISH: anagram.ui.Anagrams jtulach@255: int wordIdx = 0; jtulach@255: String original; jtulach@255: String scrambled; jtulach@255: jtulach@218: public Anagrams() { jtulach@218: initComponents(); jtulach@218: getRootPane().setDefaultButton(guessButton); jtulach@246: jtulach@246: String version = System.getProperty("anagram.version"); jtulach@246: if (version != null) { jtulach@246: if (version.startsWith("app-")) { jtulach@246: version = version.substring(4); jtulach@246: } jtulach@246: setTitle("Anagrams - " + version + " version"); jtulach@246: } jtulach@218: } jtulach@218: jtulach@252: public final String getOriginalWord() { jtulach@252: return original; jtulach@252: } jtulach@252: jtulach@252: public final String getScrambledWord() { jtulach@252: return scrambled; jtulach@219: } jtulach@219: jtulach@218: /** This method is called from within the constructor to jtulach@218: * initialize the form. jtulach@218: * WARNING: Do NOT modify this code. The content of this method is jtulach@218: * always regenerated by the Form Editor. jtulach@218: */ jtulach@218: private void initComponents() {//GEN-BEGIN:initComponents jtulach@218: java.awt.GridBagConstraints gridBagConstraints; jtulach@218: jtulach@218: mainPanel = new javax.swing.JPanel(); jtulach@218: scrambledLabel = new javax.swing.JLabel(); jtulach@218: guessLabel = new javax.swing.JLabel(); jtulach@218: feedbackLabel = new javax.swing.JLabel(); jtulach@218: guessButton = new javax.swing.JButton(); jtulach@218: scrambledWord = new javax.swing.JTextField(); jtulach@218: guessedWord = new javax.swing.JTextField(); jtulach@218: nextTrial = new javax.swing.JButton(); jtulach@218: mainMenu = new javax.swing.JMenuBar(); jtulach@218: File = new javax.swing.JMenu(); jtulach@218: jMenuItem1 = new javax.swing.JMenuItem(); jtulach@218: jMenuItem2 = new javax.swing.JMenuItem(); jtulach@218: jtulach@218: setTitle("Anagrams"); jtulach@218: addWindowListener(new java.awt.event.WindowAdapter() { jtulach@218: public void windowClosing(java.awt.event.WindowEvent evt) { jtulach@218: exitForm(evt); jtulach@218: } jtulach@218: }); jtulach@218: jtulach@218: mainPanel.setLayout(new java.awt.GridBagLayout()); jtulach@218: jtulach@218: mainPanel.setBorder(new javax.swing.border.EmptyBorder(new java.awt.Insets(11, 11, 12, 12))); jtulach@218: mainPanel.setMinimumSize(new java.awt.Dimension(297, 200)); jtulach@218: mainPanel.setPreferredSize(new java.awt.Dimension(297, 200)); jtulach@218: scrambledLabel.setText("Scrambled Word:"); jtulach@218: gridBagConstraints = new java.awt.GridBagConstraints(); jtulach@218: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; jtulach@218: gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; jtulach@218: gridBagConstraints.insets = new java.awt.Insets(12, 12, 12, 6); jtulach@218: mainPanel.add(scrambledLabel, gridBagConstraints); jtulach@218: jtulach@218: guessLabel.setText("Your Guess:"); jtulach@218: gridBagConstraints = new java.awt.GridBagConstraints(); jtulach@218: gridBagConstraints.gridx = 0; jtulach@218: gridBagConstraints.gridy = 1; jtulach@218: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; jtulach@218: gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; jtulach@218: gridBagConstraints.insets = new java.awt.Insets(0, 12, 12, 6); jtulach@218: mainPanel.add(guessLabel, gridBagConstraints); jtulach@218: jtulach@218: feedbackLabel.setText(" "); jtulach@218: gridBagConstraints = new java.awt.GridBagConstraints(); jtulach@218: gridBagConstraints.gridx = 1; jtulach@218: gridBagConstraints.gridy = 2; jtulach@218: gridBagConstraints.gridwidth = 2; jtulach@218: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; jtulach@218: gridBagConstraints.weightx = 1.0; jtulach@218: gridBagConstraints.insets = new java.awt.Insets(0, 0, 6, 6); jtulach@218: mainPanel.add(feedbackLabel, gridBagConstraints); jtulach@218: jtulach@218: guessButton.setMnemonic('G'); jtulach@218: guessButton.setText("Guess"); jtulach@218: guessButton.setToolTipText("Guess the scrambled word."); jtulach@218: guessButton.addActionListener(new java.awt.event.ActionListener() { jtulach@218: public void actionPerformed(java.awt.event.ActionEvent evt) { jtulach@218: guessedWordActionPerformed(evt); jtulach@218: } jtulach@218: }); jtulach@218: jtulach@218: gridBagConstraints = new java.awt.GridBagConstraints(); jtulach@218: gridBagConstraints.gridx = 2; jtulach@218: gridBagConstraints.gridy = 3; jtulach@218: gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; jtulach@218: gridBagConstraints.insets = new java.awt.Insets(0, 0, 11, 6); jtulach@218: mainPanel.add(guessButton, gridBagConstraints); jtulach@218: jtulach@218: scrambledWord.setEditable(false); jtulach@218: gridBagConstraints = new java.awt.GridBagConstraints(); jtulach@218: gridBagConstraints.gridwidth = 3; jtulach@218: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; jtulach@218: gridBagConstraints.weightx = 1.0; jtulach@218: gridBagConstraints.insets = new java.awt.Insets(12, 0, 12, 11); jtulach@218: mainPanel.add(scrambledWord, gridBagConstraints); jtulach@218: jtulach@218: gridBagConstraints = new java.awt.GridBagConstraints(); jtulach@218: gridBagConstraints.gridx = 1; jtulach@218: gridBagConstraints.gridy = 1; jtulach@218: gridBagConstraints.gridwidth = 3; jtulach@218: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; jtulach@218: gridBagConstraints.weightx = 1.0; jtulach@218: gridBagConstraints.insets = new java.awt.Insets(0, 0, 12, 11); jtulach@218: mainPanel.add(guessedWord, gridBagConstraints); jtulach@218: jtulach@218: nextTrial.setMnemonic('N'); jtulach@218: nextTrial.setText("New Word"); jtulach@218: nextTrial.setToolTipText("Fetch a new word."); jtulach@218: nextTrial.addActionListener(new java.awt.event.ActionListener() { jtulach@218: public void actionPerformed(java.awt.event.ActionEvent evt) { jtulach@218: nextTrialActionPerformed(evt); jtulach@218: } jtulach@218: }); jtulach@218: jtulach@218: gridBagConstraints = new java.awt.GridBagConstraints(); jtulach@218: gridBagConstraints.gridx = 3; jtulach@218: gridBagConstraints.gridy = 3; jtulach@218: gridBagConstraints.insets = new java.awt.Insets(0, 0, 11, 11); jtulach@218: mainPanel.add(nextTrial, gridBagConstraints); jtulach@218: jtulach@218: getContentPane().add(mainPanel, java.awt.BorderLayout.CENTER); jtulach@218: jtulach@218: File.setText("File"); jtulach@218: jMenuItem1.setText("About"); jtulach@218: jMenuItem1.setToolTipText("About"); jtulach@218: jMenuItem1.addActionListener(new java.awt.event.ActionListener() { jtulach@218: public void actionPerformed(java.awt.event.ActionEvent evt) { jtulach@218: jMenuItem1ActionPerformed(evt); jtulach@218: } jtulach@218: }); jtulach@218: jtulach@218: File.add(jMenuItem1); jtulach@218: jtulach@218: jMenuItem2.setText("Exit"); jtulach@218: jMenuItem2.setToolTipText("Quit Team, Quit!"); jtulach@218: jMenuItem2.addActionListener(new java.awt.event.ActionListener() { jtulach@218: public void actionPerformed(java.awt.event.ActionEvent evt) { jtulach@218: jMenuItem2ActionPerformed(evt); jtulach@218: } jtulach@218: }); jtulach@218: jtulach@218: File.add(jMenuItem2); jtulach@218: jtulach@218: mainMenu.add(File); jtulach@218: jtulach@218: setJMenuBar(mainMenu); jtulach@218: jtulach@218: java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); jtulach@218: setBounds((screenSize.width-400)/2, (screenSize.height-250)/2, 400, 250); jtulach@218: }//GEN-END:initComponents jtulach@218: jtulach@218: private void nextTrialActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextTrialActionPerformed jtulach@218: wordIdx++; jtulach@218: jtulach@218: feedbackLabel.setText(" "); jtulach@218: initWord(); jtulach@218: guessedWord.setText(""); jtulach@218: getRootPane().setDefaultButton(guessButton); jtulach@218: jtulach@218: guessedWord.requestFocus(); jtulach@218: }//GEN-LAST:event_nextTrialActionPerformed jtulach@218: jtulach@252: protected final void initWord() { jtulach@218: jtulach@218: String[] words = getWordLibrary().getWords(); jtulach@218: int index = wordIdx % words.length; jtulach@218: jtulach@218: original = words[index]; jtulach@252: Scrambler scrambler = getScrambler(); jtulach@252: scrambled = scrambler != null ? scrambler.scramble(original) : original; jtulach@218: jtulach@218: scrambledWord.setText(scrambled); jtulach@218: } jtulach@218: jtulach@218: private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed jtulach@218: System.exit(0); jtulach@218: }//GEN-LAST:event_jMenuItem2ActionPerformed jtulach@218: jtulach@218: private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed jtulach@218: new About().show(); jtulach@218: }//GEN-LAST:event_jMenuItem1ActionPerformed jtulach@218: jtulach@218: private void guessedWordActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guessedWordActionPerformed jtulach@218: jtulach@218: if(guessedWord.getText().equals(original)) { jtulach@218: feedbackLabel.setText("Correct! Try a new word!"); jtulach@218: getRootPane().setDefaultButton(nextTrial); jtulach@218: } else { jtulach@218: feedbackLabel.setText("Incorrect! Try again!"); jtulach@218: guessedWord.setText(""); jtulach@218: } jtulach@218: jtulach@218: guessedWord.requestFocus(); jtulach@218: }//GEN-LAST:event_guessedWordActionPerformed jtulach@218: jtulach@218: /** Exit the Application */ jtulach@218: private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm jtulach@218: System.exit(0); jtulach@218: }//GEN-LAST:event_exitForm jtulach@218: jtulach@218: @Override jtulach@218: public void setVisible(boolean v) { jtulach@218: super.setVisible(v); jtulach@218: if (v) { jtulach@218: guessedWord.requestFocus(); jtulach@218: } jtulach@218: } jtulach@218: jtulach@218: // Variables declaration - do not modify//GEN-BEGIN:variables jtulach@218: private javax.swing.JMenu File; jtulach@218: private javax.swing.JLabel feedbackLabel; jtulach@218: private javax.swing.JButton guessButton; jtulach@218: private javax.swing.JLabel guessLabel; jtulach@218: private javax.swing.JTextField guessedWord; jtulach@218: private javax.swing.JMenuItem jMenuItem1; jtulach@218: private javax.swing.JMenuItem jMenuItem2; jtulach@218: private javax.swing.JMenuBar mainMenu; jtulach@218: private javax.swing.JPanel mainPanel; jtulach@218: private javax.swing.JButton nextTrial; jtulach@218: private javax.swing.JLabel scrambledLabel; jtulach@218: private javax.swing.JTextField scrambledWord; jtulach@218: // End of variables declaration//GEN-END:variables jtulach@218: jtulach@218: }