0

jTabbedPaneを使用したアプリケーションがあります。jTabbedPaneには2つのタブ(JPanel)があります。最初のタブにはキャンバスが含まれ、2番目のタブには単純なJLabelが含まれます。ボタンは長方形をキャンバスに描画します。

それまではすべて問題ありません。ただし、タブを切り替えると、canvasはすべてを失います。自分で塗り直す必要があります。

タブを変更した後、長方形が存在する必要があります。問題について何か考えがありますか?

私のボタンコードはここにあります:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    Graphics g = canvas1.getGraphics();
    g.drawRect(10, 10, 100, 100);
}

前もって感謝します。

4

1 に答える 1

0

まず第一に、AWTコンポーネントをSwingコンポーネントの中に入れてはいけません。Canvasの代わりにJComponentまたはJPanelを使用してください。

第二に、いいえ、それ自体を塗り直すべきではありません。ボタンがクリックされたら、ペイントする必要があるものを変数に格納するだけpaintComponent()で、この変数に格納されているものをペイントするためにメソッドをオーバーライドする必要があります。このように、コンポーネントが再描画されるたびに、この変数に最後に格納されたものが再描画されます。

例えば:

public class RectangleComponent extends JComponent {

    private boolean shouldPaintRectangle = false;

    public void setShouldPaintRectangle(boolean b) {
        this.shouldPaintRectangle = b;
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (shouldPaintRectangle) {
            g.drawRect(10, 10, 100, 100);
        }
    }
}

一般に、コンポーネントのグラフィックスを要求してペイントすることは絶対にしないでください。paintComponent()代わりに、引数として渡されたグラフィックスを使用してコンポーネントをオーバーライドおよびペイントする必要があります。

于 2013-02-24T16:36:14.100 に答える