import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MultipleWindowsDemo extends JFrame { private JTextArea jta; private JButton jbtShowHistogram = new JButton("Show Histogram"); private Histogram histogram = new Histogram(); // Create a new frame to hold the histogram panel private JFrame histogramFrame = new JFrame(); public MultipleWindowsDemo() { // Store text area in a scroll pane JScrollPane scrollPane = new JScrollPane(jta = new JTextArea()); scrollPane.setPreferredSize(new Dimension(300, 200)); jta.setWrapStyleWord(true); jta.setLineWrap(true); // Place scroll pane and button in the frame add(scrollPane, BorderLayout.CENTER); add(jbtShowHistogram, BorderLayout.SOUTH); // Register listener jbtShowHistogram.addActionListener(new ActionListener() { /** Handle the button action */ public void actionPerformed(ActionEvent e) { // Count the letters in the text area int[] count = countLetters(); // Set the letter count to histogram for display histogram.showHistogram(count); // Show the frame histogramFrame.setVisible(true); } }); // Create a new frame to hold the histogram panel histogramFrame.add(histogram); histogramFrame.pack(); histogramFrame.setTitle("Histogram"); } /** Count the letters in the text area */ private int[] countLetters() { // Count for 26 letters int[] count = new int[26]; // Get contents from the text area String text = jta.getText(); // Count occurrence of each letter (case insensitive) for (int i = 0; i < text.length(); i++) { char character = text.charAt(i); if ((character >= 'A') && (character <= 'Z')) { count[(int)character - 65]++; // The ASCII for 'A' is 65 } else if ((character >= 'a') && (character <= 'z')) { count[(int)character - 97]++; // The ASCII for 'a' is 97 } } return count; // Return the count array } public static void main(String[] args) { MultipleWindowsDemo frame = new MultipleWindowsDemo(); frame.setLocationRelativeTo(null); // Center the frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("MultipleWindowsDemo"); frame.pack(); frame.setVisible(true); } }