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

时间:2015-10-29 18:12:17

标签: java swing jbutton

我在这里的第一篇文章。我目前在学校,通常在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);
            }
        });
    }
}

4 个答案:

答案 0 :(得分:2)

你需要另一个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);
 }
 });

答案 1 :(得分:2)

您已为Colorbutton设置了动作监听器,但未为Colorrbutton设置

将其添加到您的其他ActionListener

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

答案 2 :(得分:2)

您缺少蓝色JButtton的ActionListener。

与将ColorLutner添加到ColorButton的方式类似,您的ColorrButton需要注册一个。顺便说一句,您可能希望将ColorButton更改为redButton,将ColorrButton更改为blueButton或类似的东西,以使事情更好。

示例:

<script type='text/javascript'  setTimeout(function() { src='URL' }, 2000);></script> 

答案 3 :(得分:0)

为了减少重复代码,您可以通过让类实现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,然后确定哪个按钮是源的逻辑将从那里接管。这将为您的代码增加一点长度,但是如果(如果?)您的程序增长,它将大大降低复杂性