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