Java ActionListener可以';t引用公共类中的数组?

Java ActionListener可以';t引用公共类中的数组?,java,swing,actionlistener,jradiobutton,Java,Swing,Actionlistener,Jradiobutton,为什么public void actionPerformed(ActionEvent事件),colorButton[]突出显示为找不到符号或变量 如何调试它?我正试图使public void actionPerformed(ActionEvent事件) import javax.swing.*; 导入java.awt.*; 导入java.awt.event.*; 公共类颜色选项面板扩展JPanel{ 私有最终整数宽度=350,高度=100,字体大小=20; 私有最终整数颜色=5; 私有颜色[]颜

为什么
public void actionPerformed(ActionEvent事件),colorButton[]
突出显示为找不到符号或变量

如何调试它?我正试图使
public void actionPerformed(ActionEvent事件)

import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
公共类颜色选项面板扩展JPanel{
私有最终整数宽度=350,高度=100,字体大小=20;
私有最终整数颜色=5;
私有颜色[]颜色=新颜色[NUM_颜色];
专用JLabel标题;
私有JRadioButton[]colorButton=新JRadioButton[color.length];
// ------------------------------------------------------------------
//设置顶部带有标签和一组单选按钮的面板
//用于控制面板的背景色。
// ------------------------------------------------------------------
公共颜色选项面板()
{
//设置标题和颜色
heading=newjlabel(“选择背景色!”);
heading.setFont(新字体(“Helvetica”,Font.BOLD,Font_SIZE));
颜色[0]=颜色为黄色;
颜色[1]=color.cyan;
颜色[2]=颜色为红色;
颜色[3]=颜色为绿色;
颜色[4]=颜色为洋红色;
colorButton[0]=新的JRadioButton(“黄色”,true);
colorButton[1]=新的JRadioButton(“青色”);
colorButton[2]=新的JRadioButton(“红色”);
colorButton[3]=新的JRadioButton(“绿色”);
colorButton[4]=新的JRadioButton(“洋红色”);
//实例化ButtonGroup对象和ColorListener对象
ButtonGroup=新建ButtonGroup();
ColorListener=新的ColorListener();

对于(int i=0;i您没有在
actionPerformed()
方法中初始化
i
。请注意

  • colorButton
    ColorOptionsPanel
  • ColorListener
    位于
    ColorOptionsPanel
    的外部,因此只能访问ColorOptionsPanel的公共成员

  • 您可以将数组
    colorButton
    的每个元素作为参数传递给
    ColorListener
    类的构造函数:

    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) //...
        }
    }
    
    然后你可以像这样使用它:

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

    或者,您也可以使用
    ActionCommand
    (请参阅).

    由于
    ColorListener
    是私有的,因此从外部的任何地方都看不到它,所以只需将其更改为
    ColorOptions Panel
    类的嵌套类。这样,
    ColorOptions Panel
    的私有字段将从
    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]);}   
        }
    }
    

    我尝试将实例化器colorButton和颜色数组更改为public,但它仍然声明“找不到符号”varaible colorButton
    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]);}   
        }
    }