【发布时间】:2020-08-09 12:53:39
【问题描述】:
我有一个按钮。我想在点击后更改背景。我的问题是按钮自动呼叫paintComponent()。如何防止这种情况?我希望单击按钮后按钮会是蓝色的,但它仍然是红色的。
package test;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ButtonDemo extends JButton implements ActionListener{
public ButtonDemo() {
this.setText("BUTTON TEXT");
this.addActionListener(this);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.RED);
}
public static void main(String[] args){
JFrame frame = new JFrame();
JPanel contentPane = new JPanel();
frame.setContentPane(contentPane);
contentPane.add(new ButtonDemo());
frame.setSize(500, 500);
frame.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
this.setBackground(Color.BLUE);
}
}
【问题讨论】:
-
所以,基本上,你想要一个“切换”按钮——也许从看看How to Use Buttons, Check Boxes, and Radio Buttons开始,我会密切关注
JToggleButton。如果这不是您想要的,那么您可能需要研究构建自己的ButtonModel -
@MadProgrammer 我正在为象棋人使用按钮。我在
paintComponent中打电话给setBackground。当我单击一个国际象棋人时,我想将背景颜色更改为红色(如提示),然后,我调用 repaint() 来获取默认颜色。你对我有什么建议吗? -
请参阅:Are expletives (cursing, swear words or vulgar language) allowed on SE sites?,了解 Stack Overflow 的/Stack Exchange 的政策。保持措辞专业。
-
@Puskin 我认为
JButton可能不是正确的选择,但我正在寻找一种解决方案,我可以设置border属性来代替 -
@Puskin " 我在 paintComponent 中调用 setBackground" - 啊,不 - 不要在
paintComponent中修改组件的状态
标签: java swing jbutton setbackground