[英]How do I change the background color of a JPanel using JRadioButton
我想要做的是我正在尝试使用 JRadioButtons 更改 JPanel 的背景颜色,但是当我单击 JRadioButton 时,JPanel 的背景颜色不会改变
这是我写的代码。 ActionListener 有什么问题,它似乎在这里不起作用
我在这里使用了 JRadioButtons 并创建了其中的 3 个红色、蓝色、绿色。 我将它们放在一个 ButtonGroup 中。 在此之后,我添加了一个与之关联的 actionListener。 然后我创建了一个 JPanel 并为其添加了边框。 它的名字是颜色框。 然后在 class changeListener 中我创建了一个 if 和 else 语句,说明如果 e.getSource 或 red(Button).isSelected() 那么 colorBox 面板的背景将设置为红色,对于 rest 也是如此按钮我做了同样的事情,但是在我单击 JRadioButton 后该面板的颜色没有改变。 这里有什么问题? 我该如何纠正这个
package aui;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
public class E_3_2 extends JFrame
{ private static int FRAME_WIDTH = 500, FRAME_HEIGHT = 400;
private JRadioButton red,blue,green;
private ButtonGroup group;
private JPanel panel, colorBox;
private ActionListener listener;
public static void main(String[] args)
{
JFrame frame = new E_3_2();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Change the background Color of a Panel");
frame.setVisible(true);
}
public E_3_2()
{
red = new JRadioButton("Red");
red.addActionListener(listener);
blue = new JRadioButton("Blue");
red.addActionListener(listener);
green = new JRadioButton("Green");
green.addActionListener(listener);
group = new ButtonGroup();
group.add(red);
group.add(blue);
group.add(green);
setLayout(new BorderLayout());
panel = new JPanel();
panel.add(blue);
panel.add(green);
panel.add(red);
add(panel, BorderLayout.WEST);
//
colorBox = new JPanel();
colorBox.setBorder(new TitledBorder(new EtchedBorder(), "Color Box"));
colorBox.setSize(150, 150);
add(colorBox);
setSize(FRAME_WIDTH, FRAME_HEIGHT);
}
class ChangeListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String clickedButton = e.getActionCommand();
System.out.println(clickedButton + " clicked");
if(e.getSource() == red || red.isSelected())
{
colorBox.setBackground(Color.red);
}
else if(e.getSource() == blue || blue.isSelected())
{
colorBox.setBackground(Color.blue);
}
else if (e.getSource() == green || green.isSelected())
{
colorBox.setBackground(Color.green);
}
}
}
}
您的listener
器 object 被声明为ActionListener
。 为了使用您自己的侦听器,您需要使用使用重写方法的ChangeListener
。
为了提高效率,您可以尝试使用匿名内部 class 只是为了让自己更轻松。 例如:
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event)
{
}
});
你从来没有为private ActionListener listener
分配任何东西,为了解决这个问题,添加行listener = new ChangeListener();
给你的构造函数。
此外,蓝色按钮不起作用,因为您从未给它一个监听器。
您的构造函数现在看起来像这样:
public E_3_2()
{
listener = new ChangeListener();
red = new JRadioButton("Red");
red.addActionListener(listener);
blue = new JRadioButton("Blue");
blue.addActionListener(listener);
green = new JRadioButton("Green");
green.addActionListener(listener);
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.