1

Swings で PaintBrush を作成しようとしています。JPanels の 1 つでフリーハンド描画をしたかったので、PaintComponent をオーバーライドして何かを描画しました。問題ありません。しかし、私は背景を取得しません。白い背景が必要だったので、paintComponent() 内で super.paintComponent(g) を呼び出しました。今では背景を取得できますが、私の repaint() が mouseDragged イベントで呼び出されるたびに、i JPanel で前に描いた絵が消えてしまいました。背景色を取得する方法はありますか? また、以前の描画は失われませんか?

任意の助けをいただければ幸いです.Thanks

JPanel paintComponent()

public void paintComponent(Graphics g) {
        // super.paintComponent(g);
      g.setColor(Color.red);
      g.fillOval(xpos, ypos, 5, 5);

    }

マウスドラッグ()

public void mouseDragged(MouseEvent arg0) {
        xpos= arg0.getX();
         ypos= arg0.getY();
         repaint();
            }
4

1 に答える 1

2

これは、コンポーネントを呼び出しgetGraphics()て取得した Graphics オブジェクトを使用して描画した場合によく発生します。これは、取得した Graphics オブジェクトが持続しないためです。すべての描画は、paintComponent 内から、または paintComponent から呼び出されるメソッドから実行する必要があります。

編集
OK、コードを投稿してくれてありがとう。したがって、コードで楕円形を 1 つしか描いていないことがわかります。そのため、スーパーが線の描画を妨げても驚くことではありません。

可能な解決策:

  • mouseDragged(...)メソッドで Point を a に追加し、List<Point>そのリストpaintComponent(...)を繰り返して線を描画します (Graphics2D Stroke を設定して線の太さを変更します)。
  • または BufferedImage に描画し、paintComponent(...) メソッドで BufferedImage を表示します。

たとえば、この質問に対する私の StackOverflow の回答をご覧ください: JPanel Graphics g color drawing line の変更

于 2012-04-14T12:31:48.280 に答える