我有一个非常基本的小 JFrame,它带有 JToggleButtons 和子类 JPanel,它们知道如何绘制我希望它们绘制的内容。选择一个按钮会导致一个椭圆出现在相应的面板中。取消选择按钮会使图纸消失。
不幸的是,最小化(图标化)然后恢复(去图标化)会导致任何绘制的形状消失。所以我需要手动触发重绘。问题是,如果我先显示一个消息框,我只能完成重绘(也就是说,我只看到它)。
这是 JFrame 的 deiconify 事件:
private void formWindowDeiconified(java.awt.event.WindowEvent evt)
{
//having this message makes everything work
JOptionPane.showMessageDialog(null, "Useless message this is.");
//but if I skip it, I'm SOL
//what's going on?
drawAll();
}
此方法遍历我的所有按钮,并在必要时要求重绘:
public void drawAll()
{
for (int i=0; i<channels; i++)
{
if (buttons[i].isSelected())
{
lightboxes[i].drawMe();
}
}
}
这是我的子类 JPanel:
class MyJPanel extends JPanel {
public void drawMe()
{
Graphics myGraphics = this.getGraphics();
myGraphics.fillOval(0, 0, this.getWidth(), this.getHeight());
}
public void unDraw()
{
this.invalidate();
this.repaint();
}
}