/*
* HistogramJframe.java
*
* Created on March 15, 2007, 5:30 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package mygraphics;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class HistogramJframe extends JFrame {
// Mechanism for user input
private JLabel label1; // Prompt to user
private JTextField textfield1; // Data entry mechanism
// Member variables used as part of output display
private MyPanel pan = null;
private static int histogramWidth = 300;
private static int histogramHeight = 300;
private int MAX_COLORS = 6;
private Color col[] = new Color[MAX_COLORS];
// Member variables used as part of data storage and manipulation
private final int MAX_NUMBERS = 50; // The maximum number of entries allowed
private int[] dataValue = new int[MAX_NUMBERS];
private boolean cannotAddFlag = false; // Indicates whether more data can be added
private int entryCount = 0;
public static void main( String[] args ) {
HistogramJframe frame = new HistogramJframe(); // Construct window
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize( new Dimension( histogramWidth + 140, histogramHeight + 180 ) );
frame.setVisible( true );
}
/** Creates a new instance of HistogramJframe */
public HistogramJframe() {
super("Histogram Demonstration");
Container c = this.getContentPane();
c.setLayout(new BorderLayout());
// Create panel to hold input components
JPanel jpan = new JPanel();
jpan.setLayout(new GridLayout(1,2));
jpan.setBorder(new TitledBorder("Data Entry"));
c.add(jpan,BorderLayout.NORTH);
jpan.setVisible(true);
// Create prompt and input mechanism to get data values from user
label1 = new JLabel("Enter number, hit Enter key:");
label1.setBorder(new EtchedBorder());
jpan.add( label1); // put prompt on panel
textfield1 = new JTextField( 10 );
textfield1.setEditable(true);
jpan.add( textfield1 ); // put input JTextField on panel
// Listener to respond to a user hitting Enter in any JTextField
MyActionListener myActListener = new MyActionListener();
textfield1.addActionListener( myActListener );
// Panel on which to display histogram
pan = new MyPanel();
pan.setBorder(new EtchedBorder());
c.add(pan,BorderLayout.CENTER);
pan.setVisible(true);
}
private void addNumberStringToArray(String numberStr) {
int numb = 0;
if ((numberStr != null) && (numberStr.length()) > 0) {
if (entryCount < MAX_NUMBERS) {
numb = Integer.parseInt(numberStr);
dataValue[entryCount] = numb;
entryCount++;
}
}
}
private void displayData() {
pan.repaint();
}
protected String arrayToString(int Z[], int count) {
String result = "";
for (int i = 0; i < count; i++) {
result += Z[i] + " ";
}
return result;
}
// Listener class to react to the user hitting the Enter key in JTextField
class MyActionListener implements ActionListener {
// Process user's action in JTextField input
public void actionPerformed( ActionEvent e) {
String outputStr = "";
if ( entryCount < MAX_NUMBERS ) && ( numb <= 300 ) {
String numberStr = textfield1.getText();
if (numberStr.length() > 0) {
addNumberStringToArray(numberStr);
textfield1.setText("");
outputStr = "The array values: " + arrayToString(dataValue, entryCount);
JOptionPane.showMessageDialog(null, outputStr, "Results",
JOptionPane.INFORMATION_MESSAGE);
}
} else {
cannotAddFlag = true;
}
displayData();
}
}
// A JPanel on which to draw the histogram
class MyPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
// NOTE: Student must replace the following illustrative code.
// This existing code does not belong in your final program.
// See the handout containing the Exercise instructions.
g.drawString("Histogram Demonstration", 30, 80);
g.setColor(Color.RED);
g.fillRect(30, 110, 250, 30);
g.setColor(Color.BLUE);
g.fillRect(30, 140, 350, 30);
g.setColor(Color.GREEN);
g.fillRect(30, 170, 150, 30);
}
}
createColorList(color) {
color[0]=new Color(255, 0, 150);
color[1]=new Color()
color[3]=new Color()
color[4]=new Color()
color[5]=new Color()
color[6]=new Color()
return color;
}
}