繁体   English   中英

如何使用 JRadioButton 更改 JPanel 的背景颜色

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM