1

Why is public void actionPerformed (ActionEvent event), colorButton[] highlighted as cannot find symbol or variable?

How do I debug it? I'm trying to make colorButton[] defined in public void actionPerformed (ActionEvent event)

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ColorOptionsPanel extends JPanel {
private final int WIDTH = 350, HEIGHT = 100, FONT_SIZE = 20;
private final int NUM_COLORS = 5;
private Color [] color = new Color[NUM_COLORS];
private JLabel heading;
private JRadioButton [] colorButton= new JRadioButton[color.length];

// ------------------------------------------------------------------
// Sets up a panel with a label at the top and a set of radio buttons
// that control the background color of the panel.
// ------------------------------------------------------------------
public ColorOptionsPanel ()
{

// Set up heading and colors
heading = new JLabel ("Choose the background color!");
heading.setFont (new Font ("Helvetica", Font.BOLD, FONT_SIZE));
color[0] = Color.yellow;
color[1] = Color.cyan;
color[2] = Color.red;
color[3] = Color.green;
color[4] = Color.magenta;

colorButton[0]=new JRadioButton("Yellow",true);
colorButton[1]=new JRadioButton("Cyan");
colorButton[2]=new JRadioButton("Red");
colorButton[3]=new JRadioButton("Green");
colorButton[4]=new JRadioButton("Magenta");

// Instantiate a ButtonGroup object and a ColorListener object

ButtonGroup group=new ButtonGroup();
ColorListener listener = new ColorListener();
 for(int i = 0; i <colorButton.length; i++)
 {group.add(colorButton[i]);
 colorButton[i].addActionListener(listener);
 colorButton[i].setBackground(Color.white);
 colorButton[i].addActionListener(listener);
   add(colorButton[i]);
 }

add(heading);
setBackground (Color.yellow);
setPreferredSize (new Dimension (WIDTH, HEIGHT));
 }






// Set up the panel

// Group the radio buttons, add a ColorListener to each,
 // set the background color of each and add each to the panel.
}
// **************************************************************
// Represents the listener for the radio buttons.
// **************************************************************
private class ColorListener implements ActionListener
{
// --------------------------------------------------------
// Updates the background color of the panel based on
// which radio button is selected.
// --------------------------------------------------------

public void actionPerformed (ActionEvent event)
{

Object source = event.getSource();


if (source==colorButton[i])
{setBackground(colorButton[i]);
}   



}



}
}

}
Eng.Fouad
  • 115,165
  • 71
  • 313
  • 417
V_Stack
  • 147
  • 2
  • 7
  • 15

4 Answers4

1

You can pass each element of array colorButton as an argument to the constructor of ColorListener class:

private class ColorListener implements ActionListener
{
    private JRadioButton rdoButton;
    public ColorListener(JRadioButton rdoButton)
    {
        this.rdoButton = rdoButton;
    }

    @Override
    public void actionPerformed(ActionEvent event)
    {
         Object source = event.getSource();
         if(source == rdoButton) //...
    }
}

and then you can use it like:

ColorListener listener = new ColorListener(colorButton[i]);
colorButton[i].addActionListener(listener);

or alternatively, you can use ActionCommand (see this example).

Eng.Fouad
  • 115,165
  • 71
  • 313
  • 417
1

As ColorListener is private, it can not be seen from anywhere else outside so just change it to be a nested class of the ColorOptionsPanel class. This way, private fields of ColorOptionsPanel will be visible from ColorListener.

public class ColorOptionsPanel extends JPanel {
    private JRadioButton [] colorButton= new JRadioButton[color.length];
    //....
    private class ColorListener implements ActionListener{
    // --------------------------------------------------------
    // Updates the background color of the panel based on
    // which radio button is selected.
    // --------------------------------------------------------
    public void actionPerformed (ActionEvent event){
        Object source = event.getSource();
        if (source==colorButton[i]){setBackground(colorButton[i]);}   
    }
}
GETah
  • 20,922
  • 7
  • 61
  • 103
0

You didn't initialize i in actionPerformed() method. Keep attention.

temple.t
  • 39
  • 2
0
  1. colorButton is private to ColorOptionsPanel
  2. ColorListener is external to ColorOptionsPanel so can only access public members of ColorOptionsPanel
mcfinnigan
  • 11,442
  • 35
  • 28
  • i tried changing my instantiator colorButton and Color array to public but it still stating "cannot find symbol" varaible colorButton – V_Stack Nov 23 '11 at 10:54