好的,所以我制作了一个JToggleButton:
JToggleButton button = new JToggleButton(new ImageIcon(features[i].getImage())) {
private static final long serialVersionUID = 1L;
@Override
public void paint(Graphics g) {
super.paint(g);
if (isSelected()) {
g.setColor(Color.RED);
g.drawRect(0, 0, getSize().width - 1, getSize().height - 1);
}
}
};
try {
if (bodyButton.isSelected()) {
if (equals(features[i].getImage(), avatar.getBody().getImage())) {
button.setSelected(true);
}
} else if (eyesButton.isSelected()) {
if (equals(features[i].getImage(), avatar.getEyes().getImage())) {
button.setSelected(true);
}
} else if (glassesButton.isSelected()) {
if (equals(features[i].getImage(), avatar.getGlasses().getImage())) {
button.setSelected(true);
}
} else if (hairButton.isSelected()) {
if (equals(features[i].getImage(), avatar.getHair().getImage())) {
button.setSelected(true);
}
} else if (pantsButton.isSelected()) {
if (equals(features[i].getImage(), avatar.getPants().getImage())) {
button.setSelected(true);
}
} else if (shirtButton.isSelected()) {
if (equals(features[i].getImage(), avatar.getShirt().getImage())) {
button.setSelected(true);
}
} else if (shoesButton.isSelected()) {
if (equals(features[i].getImage(), avatar.getShoes().getImage())) {
button.setSelected(true);
}
}
} catch (Exception e) {}
但我遇到的问题不是绘画。正如你所看到的那样,我设置了所选的true,但它没有画出按钮 SOMETIMES ,其他时候它工作得很棒!我知道它被设置为true,因为我在它之后添加了一个。
System.out.println(button.isSelected() + " " +i);
答案 0 :(得分:4)
我可能会覆盖paintComponent()
中的JToggleButton
,或者只是使用setIcon()
。
附录:确保您正在使用EDT并正确覆盖paintComponent()
。以下简短,完整,可编译的示例(sscce)对我来说可靠。正如@camickr建议的那样,创建sscce可能有助于隔离遇到的问题。
import java.awt.*;
import javax.swing.*;
public class NewMain extends JPanel {
public NewMain() {
super(true);
JToggleButton button = new JToggleButton(new ImageIcon("test.gif")) {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(0, 0, getSize().width - 1, getSize().height - 1);
}
};
this.add(button);
}
private static void create() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new GridLayout(2, 2));
for (int i = 0; i < 4; i++) {
f.add(new NewMain());
}
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
create();
}
});
}
}
答案 1 :(得分:0)
我想在尝试解决我的问题时偶然发现了你的问题。由于您使用setSelected()来更改按钮的状态,因此请务必使用setSelectedIcon()更改选中时显示的图标。您可以将其设置为与setIcon()相同的值,并带有预期结果。