別のJPanelの内側のJPanelの問題を再描画
質問
私は別のメインJPanel
の内側にもあるこのJPanel
、内部の図形を描いています。 repaint()
で、それだけで1ミリ秒のための図形を描画し、その後、彼らが消えます。彼らは塗装滞在しない、なぜ?
私のpaintComponent
方法は、このようなものです。
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
for (int i = 0; i < reportElements.size(); i++) {
this.reportElements.get(i).display((Graphics2D) pageComponents.get(i).getGraphics());
}
}
親が有効JEditorPane
とsetEditable()
である場合には、、それが動作し、我々は形を見ることができますが、それはJPanel
だとき、ミリ秒後に私が見るすべては空のパネルです。
解決
のものに何が起こるか、この場合、 pageComponents、小型のJPanel?ザ・ 親パネルが描くつもりではありません それらの形状はそれを何ですか?
私はあなたのコメントをundertandわかりません。あなたのメインパネルが子パネルを含める必要があります。子パネルは、レイアウトマネージャを使用して、メインパネルに追加する必要があります。スイングは、メインパネルを再描画することを決定したときに、それはまた、すべての子パネルを再描画し、順番に子パネルが形を再描画されます。
その価値カスタム絵画が持つにアプローチ何のためパネル上の図形を描画するの実例ます。
他のヒント
それは永久的であるために、あなたの例では...のJPanelのGraphicsオブジェクトにペイントする必要があり、それがGraphics g
です...
ultrajohn には死んでいます。あなたが渡されたGraphics
を使用する必要があります。以下のために読んで、なぜ...
のJava 1.6は、再描画の要求の最適化をサポートしていますRepaintManager
を導入しました。それは絵にいくつかの微妙な影響を持っています。
このケースでは、複数のGraphics2Dオブジェクトで作業している:g
はpaintComponent
とgetGraphics
呼び出しによって返された値に渡される。
リペイントマネージャを使用すると、ペイントするどのg
手渡しました。注:これは、画面上が、(デフォルトのダブルバッファリングを想定して)一時バッファにペイントされません。
paintComponent
では、さまざまなコンポーネントのgetGraphics
から得たグラフィックスに塗装されている呼び出します。これは、再描画マネージャをバイパスし、バッファリングされていないディスプレイに直接塗装されています。
ときpaintChildren
戻り、RepaintManager
はダブルバッファの更新を処理するためでキック。これは、効果的に
getGraphics
から取得したグラフィックオブジェクトを介して描かれたものを消去し、表示されたバッファオーバー空白の一時バッファをペイント それはあなたの方法で描かれてきたものは何でもそのpaintChildren
またはpaintBorder
overdrawsかもしれません。おそらく、代わりにpaint
をオーバーライドしてみてください。そこには、コンポーネントの上に塗装されるかを完全に制御を持っている、とあなたはさらに、すべてのpaintComponent
、paintChildren
またはpaintBorder
を呼び出すかどうかを自分で決めることができます。