我有一个框架JPanel
,其中包含数字从1到9的JButton
按钮,当按下按钮时,它应该将其图标更改为预定义的图标。
当我初始化按钮时,我会在每个按钮上添加ActionListener
,如下所示:
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
// do something
}
}
所有按钮都位于JPanel
内,其背景颜色与其所在的框架类似。我的问题是,我应该在revalidate
内拨打repaint
和actionPerformed
按下按钮?
我问的是,因为有时按下按钮时,按住面板的框架的背景会变形。
请查看附图以了解我的意思。
按下按住1号或4号按钮时,背景会变形。
这种情况不会一直发生,我不知道是什么触发器。
感谢。
每个按钮扩展了一个扩展JButton
的类,该类具有以下方法:
public void paintComponent(Graphics g) {
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
ButtonModel m = getModel();
if (m.isPressed() || m.isSelected()) {
if (on != null)
on.paintIcon(this, g, 0, 0);
} else if (!isEnabled()) {
if (disabled != null)
disabled.paintIcon(this, g, 0, 0);
} else {
if (off != null)
off.paintIcon(this, g, 0, 0);
}
if (m.isPressed() || m.isSelected())
super.paintComponent(g);
}
答案 0 :(得分:2)
每个按钮都继承自保存图标的超类,当按下或按下按钮时,超类具有方法
您是否阅读过API?按钮支持以下方法:
同样,我不明白你的自定义绘画的必要性。
这不会永远发生!,
所有Swing组件都有责任绘制其背景。否则可能是垃圾。我们不知道为什么它是随机的Swing内置的复杂绘画逻辑。如果你遵守规则,你就不会有问题。
paintComponent()
方法的第一个陈述应该始终是:
super.paintComponent(...)
确保背景被涂上。