私は、JToggleButtons と、描画したいものを描画する方法を知っているサブクラス化された JPanels を備えた非常に基本的な小さな JFrame を持っています。ボタンを選択すると、対応するパネルに楕円が表示されます。ボタンの選択を解除すると、描画が消えます。
残念ながら、最小化 (アイコン化) してから元に戻す (非アイコン化) と、描画された図形が消えてしまいます。したがって、再描画を手動でトリガーする必要があります。問題は、最初にメッセージ ボックスを表示した場合にのみ、再描画を完了できる (つまり、再描画しか表示されない) ことです。
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();
}
}