繁体   English   中英

两个按钮将面板颜色更改为红色或蓝色

[英]Two buttons changing panel color to red or blue

我的第一篇文章在这里。 我目前在学校,通常在这里花时间在Stackoverflow上寻找作业的答案,这一次我本以为我可能会将代码放在这里,也许我会更快,更准确地获得帮助! 无论如何,我的问题是我写了一个代码,您可以在下面看到,我是新手,只研究了几个小时。 我的问题是我不太确定如何解决此问题,我有2个按钮,我要的是单击第一个按钮时面板将变为红色,第二个按钮时面板将变为蓝色,仅红色有效,我不知道如何实现它,所以蓝色也有效。

非常感谢您的帮助! (不要害羞地指出一些错误或没有按钮需要的帮助,就像我说的,我是新来的:P)

public class FirstProgram extends JFrame {

    public FirstProgram() {

        initUI();
    }

    private void initUI() {

        JPanel panel = new JPanel();
        panel.setBackground(Color.yellow);
        getContentPane().add(panel);
        panel.setLayout(null);

        JButton Colorbutton = new JButton("Red");
        Colorbutton.setBounds(50, 60, 80, 30);
        Colorbutton.setToolTipText("Panel changes to red");
        Colorbutton.setBackground(Color.green);

        JButton Colorrbutton = new JButton("Blue");
        Colorrbutton.setBounds(1, 30, 90, 30);
        Colorrbutton.setToolTipText("Panel changes to blue");
        Colorrbutton.setBackground(Color.orange);

        Colorbutton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent event) {
                panel.setBackground(Color.red);

            }
        });

        panel.add(Colorbutton);
        panel.add(Colorrbutton);
        setTitle("Time to change colors");
        setSize(300, 200);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                FirstProgram ex = new FirstProgram();
                ex.setVisible(true);
            }
        });
    }
}

您需要另一个ActionListener。 现在,您只有一种,而且只有一种行为。 创建另一个并绑定到“蓝色”按钮

JButton RedColorbutton = new JButton("Red");
 RedColorbutton .setBounds(50, 60, 80, 30);
 RedColorbutton.setToolTipText("Panel changes to red");
 RedColorbutton.setBackground(Color.green);

 JButton BlueColorbutton = new JButton("Blue");
 BlueColorrbutton.setBounds(1,30,90,30);
 BlueColorrbutton.setToolTipText("Panel changes to blue");
 BlueColorrbutton.setBackground(Color.orange);

 RedColorbutton.addActionListener(new ActionListener() {
 @Override
 public void actionPerformed(ActionEvent event) {
 panel.setBackground(Color.red);
 }
 });

BlueColorbutton.addActionListener(new ActionListener() {
 @Override
 public void actionPerformed(ActionEvent event) {
 panel.setBackground(Color.blue);
 }
 });

您已经为Colorbutton设置了一个动作监听Colorbutton ,但没有为Colorrbutton设置一个动作监听Colorrbutton

将此添加到其他ActionListener旁边

Colorrbutton.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent event)
    {
        panel.setBackground(Color.blue);
    }
});

您缺少蓝色JButtton的ActionListener。

类似于将ActionListener添加到ColorButton的方法,ColorrButton需要注册一个。 顺便说一句,您可能希望将ColorButton更改为redButton,将ColorrButton更改为blueButton或类似的东西,以使效果更好。

例:

    Colorrbutton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent event) {
            panel.setBackground(Color.blue);
        }
    });

为了减少重复的代码,可以通过让类实现ActionListener来进一步简化逻辑。

public class FirstProgram extends JFrame implements ActionListener {

然后,在实例化按钮时,添加一个监听器,如下所示:

redButton.addActionListener(this);
blueButton.addActionListener(this);

然后在actionPerformed的实现中,您可以执行以下操作:

public void actionPerformed(ActionEvent e) {
    switch (e.getSource()) {
        case redButton:
            panel.setBackground(Color.red);
            break;
        case blueButton:
            panel.setBackground(Color.blue);
            break;
    }
}

每当红色或蓝色按钮执行操作时,都会触发actionPerformed,然后逻辑确定源将从那里接管哪个按钮。 这将增加代码的长度,但是随着程序的增长,它将大大降低复杂性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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