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