0

我是Java的新手,并且一般编程。我正在尝试一个练习,在选择时,我可以在其中创建可更改背景颜色的无线电按钮。在我使用Eclipse IDE的那一刻。

Eclipse 没有给我任何错误,我可以很好地运行 b/m 程序,单选按钮显示出来并且可以点击。但是,当我选择单选按钮时,它们无法更改背景颜色。我会很感激我能得到的任何答案和指示。

谢谢!

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


    public class Gui{
    //Declares Variables
    JRadioButton red=new JRadioButton("red");
    JRadioButton blue=new JRadioButton("blue");
    JRadioButton yellow=new JRadioButton("yellow");
    ButtonGroup group = new ButtonGroup();
    //Constructor
    public Gui(){
        //Sets title
        super("RadioButton Exercise");
        //Sets layout as default
        setLayout(new FlowLayout());
        //Adds the JRadioButtons
        add(red);
        add(blue);
        add(yellow);
        //Groups the variables
        group.add(red);
        group.add(blue);
        group.add(yellow);
        //Creates HandlerClass object
        HandlerClass handler = new HandlerClass();
        //When buttons are clicked, HandlerClass is called
        red.addItemListener(handler);
        blue.addItemListener(handler);
        yellow.addItemListener(handler);


    }

    public class HandlerClass implements ItemListener{
        public void itemStateChanged(ItemEvent x){
            if(x.getSource()==red){
                setBackground(Color.RED);
            }
            else if(x.getSource()==blue){
                setBackground(Color.BLUE);
            }
            else{
                setBackground(Color.YELLOW);
            }
        }
    }



    }
4

2 回答 2

2

假设你的意思是

public class Gui extends JFrame {

不是JRadioButton没有响应,问题是setBackGround直接在框架上调用,而不是它的可见组件,即ContentPane. 您可以使用:

getContentPane().setBackground(Color.RED);
于 2013-04-05T13:37:42.267 回答
0

你有类似的条件x.getSource()==red。它不比较objects;它比较object references。所以即使两个不同的对象引用指向同一个对象,这样的表达式也会产生False

如果要比较对象,则需要使用equals方法。为了equal产生有意义的结果,这两个对象应该是相同的类型。

我建议如下:(JradioButton)x.getSource().equals(red);

于 2013-04-05T13:52:04.657 回答