JRadioButton输入没有响应

时间:2013-04-05 13:33:35

标签: java swing input jradiobutton

我是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);
            }
        }
    }



    }

2 个答案:

答案 0 :(得分:2)

假设你的意思是

public class Gui extends JFrame {

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

getContentPane().setBackground(Color.RED);

答案 1 :(得分:0)

您有条件x.getSource()==red。它没有比较objects;它比较object references。因此,即使两个不同的对象引用指向相同的对象,这样的表达式也会产生False

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

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