我有一个非常基本的小JFrame JToggleButtons和子类JPanels,知道如何绘制我想让他们画的东西。选择一个按钮会导致椭圆出现在相应的面板中。取消选择按钮会使图形消失。当我的JFrame恢复(去除噪音)时,我该如何重绘东西?
不幸的是,最小化(图标化),然后恢复(deiconifying)导致任何绘制的形状消失。所以我需要手动触发重绘。问题是如果我先显示一个消息框,我只能完成重绘(也就是说,我只有见它)。
下面是对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();
}
}
为了更快得到更好的帮助,请发布[SSCCE](http://sscce.org/)。 –
我听说过这些,但我认为在这种情况下它并不实用。最终它变得无关紧要 - 整个过程就是我应该在组件的paintComponent事件中完成绘图,并让Swing处理细节。 –