// PalindromeGui.java import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.GridBagConstraints; import java.awt.Component; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.JTextArea; import javax.swing.JButton; import javax.swing.JPanel; // constructor of program frame public class PalindromeGuiFrame extends JFrame { private GridBagLayout layout; // layout of frame private GridBagConstraints constraints; // constraints of layout private JPanel buttonJPanel; private JLabel promptLabel; private JTextField textField; private JTextArea textArea; private JButton checkJButton; private JButton exitJButton; private PalindromeChecker p; // set up GUI public PalindromeGuiFrame() { super( "PalindromeChecker" ); layout = new GridBagLayout(); setLayout( layout ); constraints = new GridBagConstraints(); p = new PalindromeChecker(); // create PalindromeChecker object // create GUI components promptLabel = new JLabel ( " Enter a string in the text field below. " ); textField = new JTextField( 25 ); textArea = new JTextArea( 5, 25 ); checkJButton = new JButton( " Check " ); exitJButton = new JButton( "Exit " ); buttonJPanel= new JPanel(); // add label constraints.fill = GridBagConstraints.HORIZONTAL; constraints.anchor = GridBagConstraints.WEST; addComponent( promptLabel, 0, 0, 1, 1 ); // add text field addComponent( textField, 1, 0, 1, 1 ); // add text Area constraints.fill = GridBagConstraints.BOTH; constraints.weightx = 1; constraints.weighty = 1; addComponent( textArea, 2, 0, 1, 1 ); // add panel of buttons buttonJPanel.setLayout( new GridLayout( 1, 2 ) ); buttonJPanel.add( checkJButton ); buttonJPanel.add( exitJButton ); constraints.weighty = 0; addComponent( buttonJPanel, 3, 0, 1, 1 ); // register handlers checkButtonHandler checkHandler = new checkButtonHandler(); checkJButton.addActionListener( checkHandler ); exitButtonHandler exitHandler = new exitButtonHandler(); exitJButton.addActionListener( exitHandler ); } // end PalindromeGuiFrame // method to set constraints on private void addComponent( Component component, int row, int column, int width, int height ) { constraints.gridx = column; constraints.gridy = row; constraints.gridwidth = width; constraints.gridheight = height; layout.setConstraints( component, constraints ); add( component ); } // end method addComponent // process text and test for palindrome private class checkButtonHandler implements ActionListener { // handle check Button event public void actionPerformed( ActionEvent event ) { int length; // length of user-entered string int newlength; // length of processed string String str = ""; String txt = textField.getText(); String results = ""; // result message length = txt.length(); textArea.setLineWrap( true ); textArea.setWrapStyleWord( true ); if ( length == 0 ) { textArea.setText( "No valid string was entered. " + "The program ignores whitespace, punctuation marks, symbols and case. " + "Please enter at least one letter or number."); } // end if else { p.settestString( txt ); str = p.parseString(); newlength = str.length(); if ( newlength == 0 ) { textArea.setText( "The user-entered string, after processing, has no valid characters. " + "The program ignores whitespace, punctuation marks, symbols and case. " + "Please enter at least one letter or number." ); } else { textArea.setLineWrap( false ); textArea.setWrapStyleWord( false ); if ( p.testPalindrome( p.parseString() ) ) { results = String.format( "%s: %s\n%s: %s\n%s: %d\n%s: %d\n%s", "Original String", p.gettestString(), "Parsed String", p.parseString(), "Length of original string", length, "Length of parsed string",str.length(), "TRUE. String is a palindrome." ); textArea.setText( results ); } else { results = String.format( "%s: %s\n%s: %s\n%s: %d\n%s: %d\n%s", "Original String", p.gettestString(), "Parsed String", p.parseString(), "Length of original string", length, "Length of parsed string", str.length(), "FALSE. String is not a palindrome." ); textArea.setText( results ); } // end else }// end else } // end else textField.setText( "" ); // clear text field for another entry } // end method actionPerformed } // end inner class okButtonHandler // exit the program when button clicked private class exitButtonHandler implements ActionListener { // handle exit event public void actionPerformed( ActionEvent event ) { System.exit( 0 ); } // end method } // end inner class } // end class