1

我试图让一个程序工作,你按下特定的单选按钮,上面写着一种颜色,它使整个页面变成那种颜色。窗口打开为一个正方形,其中有 4 种不同的颜色选项。我一辈子都无法让 actionPerformed 方法正常工作。这是我的代码。任何帮助表示赞赏。

public class ColorPanel3 extends JPanel implements ActionListener {

Color darkBlue = new Color(5,41,186);
Color lightBlue = new Color(35,253,253);
Color darkRed = new Color(158,19,47);
Color lightRed = new Color(255,105,105);


JRadioButton lightRedButton = new JRadioButton("Light Red");
JRadioButton darkBlueButton = new JRadioButton("Dark Blue");
JRadioButton lightBlueButton = new JRadioButton("Light Blue");
JRadioButton darkRedButton = new JRadioButton("Dark Red");

public  ColorPanel3() {
    setName("Color Panel");
    setLayout(new GridLayout(1, 0, 0, 0));
    JPanel panel = new JPanel();
    add(panel);
    panel.setLayout(null);
    panel.setOpaque(true);

    lightRedButton.setHorizontalAlignment(SwingConstants.CENTER);
    lightRedButton.setBounds(0, 150, 150, 150);
    lightRedButton.setBackground(lightRed);
    panel.add(lightRedButton);


    darkBlueButton.setHorizontalAlignment(SwingConstants.CENTER);
    darkBlueButton.setBounds(0, 0, 150, 150);
    darkBlueButton.setBackground(darkBlue);
    panel.add(darkBlueButton);


    lightBlueButton.setHorizontalAlignment(SwingConstants.CENTER);
    lightBlueButton.setBounds(150, 0, 150, 150);
    lightBlueButton.setBackground(lightBlue);
    panel.add(lightBlueButton);

    darkRedButton.setHorizontalAlignment(SwingConstants.CENTER);
    darkRedButton.setBounds(150, 150, 150, 150);
    darkRedButton.setBackground(darkRed);

    panel.add(darkRedButton);

    ButtonGroup group = new ButtonGroup();   //creates a button group so that only one radio button may be pressed at a time.
    group.add(darkBlueButton);
    group.add(lightBlueButton);
    group.add(darkRedButton);
    group.add(lightRedButton);

    lightRedButton.addActionListener(actionListener);
    darkRedButton.addActionListener(actionListener);
    lightBlueButton.addActionListener(actionListener);
    darkBlueButton.addActionListener(actionListener);

}

ActionListener actionListener = new ActionListener(){
    public void actionPerformed (ActionEvent e){


        if(darkBlueButton.isSelected()){
            darkBlueButton.setBackground(darkBlue);
            lightBlueButton.setBackground(darkBlue);
            lightRedButton.setBackground(darkBlue);
            darkRedButton.setBackground(darkBlue);
        }

        if(lightBlueButton.isSelected()){
            darkBlueButton.setBackground(lightBlue);
            lightBlueButton.setBackground(lightBlue);
            lightRedButton.setBackground(lightBlue);
            darkRedButton.setBackground(lightBlue);
        }

        if(darkRedButton.isSelected()){
            darkBlueButton.setBackground(darkRed);
            lightBlueButton.setBackground(darkRed);
            lightRedButton.setBackground(darkRed);
            darkRedButton.setBackground(darkRed);
        }

        if(lightRedButton.isSelected()){
            darkBlueButton.setBackground(lightRed);
            lightBlueButton.setBackground(lightRed);
            lightRedButton.setBackground(lightRed);
            darkRedButton.setBackground(lightRed);
        }
    }       

我制作了一个新的类文件来放入面板。这很有效。

public class ColorFrame{
public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.add(new ColorPanel3());
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("Color Frame");

}

}
    };

}

最终编辑:上面的代码是我最终得到的。

4

2 回答 2

1

您的动作侦听器应如下所示:

ColorPanel3.setOpaque(true);
ColourPanel3.this.setBackground(yourcolor);

此外,如果您不是为代码混淆竞赛编写此代码,请为所有单选按钮使用不同的动作侦听器。

干杯。

编辑:您必须将面板添加到JFrame

于 2015-03-23T03:24:19.313 回答
0

首先,摆脱这些行:

JRadioButton darkBlueButton = (JRadioButton) e.getSource();
JRadioButton lightBlueButton = (JRadioButton) e.getSource();
JRadioButton darkRedButton = (JRadioButton) e.getSource();
JRadioButton lightRedButton = (JRadioButton) e.getSource();

发生的事情是您正在创建四个JRadioButton实例,并引用由e.getSource(). 如果您希望背景改变颜色,那么这不是必需的。无论如何,我觉得这样做的效果不是您打算做的。

JRadioButton使用带有 a 的构造函数创建对象时String,您给它一个标签(即深蓝色),以及一个与文本相同的操作命令。您可以利用该类的getActionCommand方法ActionEvent来确定 JPanel 应该是什么颜色:

if (e.getActionCommand().equals("Dark Blue")) {
    ColorPanel3.this.setBackground(darkBlue);
}

但是为了让任何颜色变化都变得明显,您必须设置顶部面板的透明度:

panel.setOpaque(false);
于 2015-03-23T03:11:56.280 回答