質問

私は別のメイン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());

    }
}
親が有効JEditorPanesetEditable()である場合には、

、それが動作し、我々は形を見ることができますが、それはJPanelだとき、ミリ秒後に私が見るすべては空のパネルです。

役に立ちましたか?

解決

  

のものに何が起こるか、この場合、   pageComponents、小型のJPanel?ザ・   親パネルが描くつもりではありません   それらの形状はそれを何ですか?

私はあなたのコメントをundertandわかりません。あなたのメインパネルが子パネルを含める必要があります。子パネルは、レイアウトマネージャを使用して、メインパネルに追加する必要があります。スイングは、メインパネルを再描画することを決定したときに、それはまた、すべての子パネルを再描画し、順番に子パネルが形を再描画されます。

その価値カスタム絵画が持つにアプローチ何のためパネル上の図形を描画するの実例ます。

他のヒント

それは永久的であるために、あなたの例では...のJPanelのGraphicsオブジェクトにペイントする必要があり、それがGraphics gです...

ultrajohn には死んでいます。あなたが渡されたGraphicsを使用する必要があります。以下のために読んで、なぜ...

のJava 1.6は、再描画の要求の最適化をサポートしていますRepaintManagerを導入しました。それは絵にいくつかの微妙な影響を持っています。

このケースでは、複数のGraphics2Dオブジェクトで作業している:gpaintComponentgetGraphics呼び出しによって返された値に渡される。

リペイントマネージャを使用すると、ペイントするどのg手渡しました。注:これは、画面上が、(デフォルトのダブルバッファリングを想定して)一時バッファにペイントされません。

paintComponentでは、さまざまなコンポーネントのgetGraphicsから得たグラフィックスに塗装されている呼び出します。これは、再描画マネージャをバイパスし、バッファリングされていないディスプレイに直接塗装されています。

ときpaintChildren戻り、RepaintManagerはダブルバッファの更新を処理するためでキック。これは、効果的に

getGraphicsから取得したグラフィックオブジェクトを介して描かれたものを消去し、表示されたバッファオーバー空白の一時バッファをペイント

それはあなたの方法で描かれてきたものは何でもそのpaintChildrenまたはpaintBorder overdrawsかもしれません。おそらく、代わりにpaintをオーバーライドしてみてください。そこには、コンポーネントの上に塗装されるかを完全に制御を持っている、とあなたはさらに、すべてのpaintComponentpaintChildrenまたはpaintBorderを呼び出すかどうかを自分で決めることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top