0

here is the code.... below is my problem.............

/*
<applet code="Assign2.class" width=350 height=350>
</applet>
*/


import java.awt.event.*;
import javax.swing.*;
import java.awt.*;


/*


Class Name - Assign2



PRIVATE FEATURES


private JButton buttons[] // array to store buttons
private String labels[]  // array to stoer the department name
private JPanel thePanel; // JPanel object
private JMenu editMenu,optionsMenu; //JMenu objects for EDIT menu and OPTIONS menu
public JMenuItem items[]  //array to store 'department name' menus inside EDIT menu
private JRadioButton options[] // array to store Color, Text, Hits options as radio buttons
private JMenuBar menubar; // MAIN MENU for the applet
private Color colors[] // array to hold colors the given colors



private final int max_bar_width // maximum width of a bar- set to 250, cna not be changed
private final int bar_height // maximum height of a bar
private int bar_width[] // array to store the bar widths for each department, can be changed by increasing the hits, 1 hit= 1 pixel
private int hits[]// array to store the number of hits for each department
private double percentage[] // array to store the number of percentage for each department


private int x_gap // x co-ordinate of each bar
private int y_gap / y co-ordinate of each bar
private int gap_between_bars // the height between each bar when displayed in the applet
private String stat // string that states the current status of the applet


private int option // helps to choose between the 3 options, "Color, Text, Hits"
// Color =0, Text=1, Hits= 2


private class MenuHandler // inner class to handle menus. Listens to menu events
private class OptionHandler // inner class to handle Options in option menu.Listens to option events
private class ButtonHandler // inner class to handle buttons. Listens to button events


PUBLIC FEATURES - Methods


# public void init() - Initializes the applet and draws the buttons and the menus
# public void paint()
# public void update()
# public void paintBars() - draws the horizontal bars for each department
# public void calculateChanges() - increases the number of hits,calculates the total no of hits and calculate the percentages
# public boolean isAlpha() - returns true or false. A method written to check if a given input string contains only characters
# public void showStatus() - Shows the current staus of the applet and used to diaply error message on the message bar of the applet
*/



public class Assign2 extends JApplet {


private JButton buttons[]=new JButton[5];
private String labels[]= {"Footwear","Kitchen Goods","Stationery","Music","Ladies Wear"};
private JPanel thePanel;
private JMenu editMenu,optionsMenu;
public JMenuItem items[]=new JMenuItem[5];
private JRadioButton options[]= new JRadioButton[3];
private JMenuBar menubar;
private Color colors[]= {Color.yellow,Color.red,Color.magenta,Color.cyan,Color.green};



private int max_bar_width=250;
private int bar_height= 25;
private int bar_width[]= {100,100,100,100,100};
private int hits[]= {200,200,200,200,200};
private double percentage[]={80.00,80.00,80.00,80.00,80.00};


private int x_gap= 15;
private int y_gap=35;
private int gap_between_bars=15;
private String stat= "Applet started!";


private int option=0;


public void init(){
Container pane = getContentPane();// returns the ContentPane
thePanel = new JPanel(); // creates panel object
thePanel.setLayout(null); // setting the layout for the panel


menubar = new JMenuBar(); // creating a menu bar object
setJMenuBar(menubar); // addind the menu bar to the applet
editMenu = new JMenu ("Edit");
menubar.add(editMenu);  // adding a the EDIT menu to the menu bar
optionsMenu = new JMenu("Options");  // creating th OPTIONS menu


for (int i=0; i <5;i++) { // the for loop create a button for each dept, sets the colors, set the size and add the buttons to the panel
buttons= new JButton(labels);// creates a new button object
buttons.setBackground(colors); // sets the color
buttons.setSize(115,30);// Sets the size
thePanel.add(buttons);// add the button to the panel
buttons.addActionListener(new ButtonHandler());  // adding a listener object to listen to button events for each button
}


buttons[0].setLocation(0,260); // set button location
buttons[1].setLocation(115,260);
buttons[2].setLocation(230,260);
buttons[3].setLocation(0,290);
buttons[4].setLocation(115,290);


for (int i=0; i <5;i++) {
items= new JMenuItem(labels); // create each menu item and setting its label
editMenu.add(items); // add the menu items to the EDIT menu
items.addActionListener(new MenuHandler()); //adding a listener object to listen to menu events
}
editMenu.add(optionsMenu);  // adding  the OPTIONS menu to the EDIT menu



ButtonGroup group = new ButtonGroup(); // creating a group to hold the 3 radio buttons for options


options[0]=new JRadioButton("Color"); // creating a radio button for COLOR option
options[0].setSelected(true);  // setting the Color option to be selected as default
options[0].addActionListener(new OptionHandler());  // adding a listener object to listen to option events
options[1]=new JRadioButton("Text");// creating a radio button for TEXT option
options[1].setSelected(false);// setting the Text option to be unselected as default
options[1].addActionListener(new OptionHandler());// adding a listener object to listen to option events


options[2]=new JRadioButton("Hits");// creating a radio button for HITS option
options[2].setSelected(false);// setting the Hits option to be unselected as default
options[2].addActionListener(new OptionHandler());// adding a listener object to listen to option events



group.add(options[0]); // add options to the group
group.add(options[1]);
group.add(options[2]);
optionsMenu.add(options[0]); // add option radio buttons to the OPTIONS menu
optionsMenu.add(options[1]);
optionsMenu.add(options[2]);


pane.add(thePanel);  // add the panel to the container



}
public void paint(Graphics g){
super.paint(g);  // calls the components paint method
calculateChanges();
paintBars(g);


}
public void update(Graphics g){
paint(g);


}



public void paintBars(Graphics g){ // method that draws the bars
Graphics2D g2d = ( Graphics2D ) g; // creating a 2d graphics object


for (int i=0;i<5;i++) { //paint bars
g2d.setPaint( colors ); // set the color for each bar
/* the filling area for each bar is calculated as follows
fill3DRect(int x, int y, int width, int height)
int x = x_gap ( the x co-ordinate of the bar)
int y= y co-ordinate of the bar + (bar height + the distance between 2 bars)* bar number
i.e ; for bar 1 --->  just the y co-ordinate
for bar 2 ----> y co_ordinate + (bar height of bar 1 + the distance betwen bar1 and bar2 ) * 1 etc


drawString (String message, int x, int y)
String message = No of hits and the Percentage for each department
int x = bar width of each dept + 10 pixels( for clarity)+ x -co-ordinate of bar position
int y = y co-ordinate of the bar + bar height(cos the string is dispalyed at the bottom of the bar)+ ( bar height + the distance between 2 bars)
i.e ; for bar 1 --->  just the y co-ordinate
for bar 2 ----> y co_ordinate + bar height of 1 +(bar height of bar 1 + the distance betwen bar1 and bar2 ) * 1 etc


*/
g2d.fill3DRect( x_gap , y_gap+((bar_height+gap_between_bars)*(i)), bar_width, bar_height, true);// Paints the rectangle filled with the current color.
g.drawString(hits + ", " + percentage+"%",bar_width+x_gap+10,y_gap + bar_height + ((bar_height+gap_between_bars)*(i)));// prints the number of hits and precentage.
}



} // end of paintbars



public void calculateChanges(){// method that calculates the total no of hits and calculate the percentages


int total =0;// initialize total to 0
for(int i=0; i<5; i++) {
bar_width=hits;// set hit=pixel
total += hits;



}//for



//calculating percentages
for (int i=0 ; i<5;i++) {
percentage=(hits*100.0) / total;
buttons.setText(labels); // set label for button
buttons.setBackground(colors); //set button background
items.setText(labels); //set menu item labels


}// end for



}// end of calculatechanges


public boolean isAlpha(String str) {
//input: string, output: true/false
//Loops therough the character array and return false if invalid character found.


boolean blnAlpha = true;// define and initialize blnAlpha


char chr[] = null;// define char array and initialize to null
if(str != null)// check whether the  string is null
chr = str.toCharArray();// break the string and insert into the chr array



for(int i=0; i<chr.length; i++) {


if((chr < 'A' || chr > 'Z') && (chr < 'a' || chr > 'z')){
if (!(chr==' ')) { // check for space
blnAlpha = false;
//System.out.println(">>" + chr + ">>"); // when debugging
}
}
}
return blnAlpha;
}//end isAlpha


//inner class to handle menus
private class MenuHandler implements ActionListener{
public void actionPerformed (ActionEvent event){
if (option==0){
for (int i=0; i<5;i++){
if(event.getSource()==items){
Color c= JColorChooser.showDialog(Assign2.this, "Choose a color for " + labels,colors);
if (c!=null){
colors = c; //set new color to array
buttons.setBackground(c); //change button background color
repaint();



}//check for c being null



}//getsource



}//end for


}//enf of option==0
if (option==1){
for (int i=0; i <5; i++){
if(event.getSource()==items){
String label = JOptionPane.showInputDialog(Assign2.this, "Edit Department Name - "
+ labels ,"Department Name",1);
if(label!= null){
if(isAlpha(label)) {
labels=label;
items.setText(label); //set menu label
buttons.setText(label); //set button label
repaint();
}
else{
showStatus("Make sure you've ONLY entered characters!!");


}//else


}//if


}// get source


}//for


}//end of option==1


if(option==2){
for(int i=0; i < 5; i++){
if(event.getSource()==items){
try {
int h= Integer.parseInt (JOptionPane.showInputDialog(Assign2.this,"Edit Department Hits - " +
labels,"Department Hits",1));
if ((h<=250) && (h>0)) { //check for validity
hits = h; //assign new value to hits array
calculateChanges();
repaint();
} else {
showStatus("Hits should be between 1 and 250!"); //show error
}



} catch(NumberFormatException e){


showStatus("You must input a number!!");


}


}// getting soure


}//end for
}//end of option==2



}//end of actionPerformed



}//end of MenuHandler



private class OptionHandler implements ActionListener {


// respond to checkbox events
public void actionPerformed( ActionEvent e )
{
//showStatus("Applet Running!");


if ( e.getSource() == options[0] ) { // option Color clicked
options[1].setSelected(false);
options[2].setSelected(false);
options[0].setSelected(true);
option = 0;
}
else if ( e.getSource() == options[1]) { //Option Text Clicked
options[1].setSelected(true);
options[2].setSelected(false);
options[0].setSelected(false);
option = 1;
}
else if ( e.getSource() == options[2] ) { //Option Hits Clicked
options[1].setSelected(false);
options[2].setSelected(true);
options[0].setSelected(false);
option = 2;
}
}//end action performed
} // OptionListner



class ButtonHandler implements ActionListener {


// respond to checkbox events
public void actionPerformed( ActionEvent e ) {
showStatus("Applet Running!");


for (int i=0;i<5;i++) {
if (e.getSource()==buttons) { //loop until correct button is found
if (hits>0 && hits < max_bar_width) { //hits cant be more than 250
hits++; //increment hits
calculateChanges(); //calculate new bar widths
repaint();
}else{
showStatus("Hits have to be between 1 and 250!"); //give error
}
}
}//end for
}//end action performed
} // ButtonHandler


public void showStatus(String Status) {
stat = Status;
getAppletContext().showStatus(stat);
}//end showStatus



} //end Assign2

here when you run the applet and click on the menu, its hidden Beneath the bars that are drawn. but once you click on a menu item and come back it works fine... what is the problem with the code ?? how can i fix this??? :(

Edited by happygeek: fixed formatting

2
Contributors
1
Reply
2
Views
9 Years
Discussion Span
Last Post by iamthwee
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.