3

を拡張するクラスを作成し、その中にJFrame追加しましたJPanelが、paintComponents()メソッドはに何も描画しませんJPanel。これがのコードですpaintComponents()。私はダブルイメージバッファリングを使用することを選択しました。

  public void paintComponents(Graphics graphics) {
     panel.paintComponents(graphics);

      bufferedImage = createImage(sizeX, sizeY);
      Graphics2D g = (Graphics2D) bufferedImage.getGraphics();


      for (ImageData myImage : imageData) {
        g.drawImage(myImage.getImage(), myImage.getX(), myImage.getY(), null);
    }

    graphics.drawImage(bufferedImage, 0, 0, null);
  }

これに何か問題がありますか?ところで、私は試しpaint()ましたが、うまくいきましたが、これを行うのに適切な方法ではないと思います。

御時間ありがとうございます。:)

4

2 に答える 2

7

などの最上位コンポーネントを拡張しないでくださいJFrame。代わりに、フレームのインスタンスを保持し、それにパネルを追加します。すべてのカスタムペイントまたはコンポーネントの追加は、パネルで行われます。

パネルでカスタムペイントを行う場合は、 paintComponentメソッドで行います(オーバーライドしないでください)。 paintComponents

その他のヒント

  • を呼び出すことを忘れないでくださいsuper.paintComponent(g);。これは、境界線やパディングなどが確実に考慮されるようにするために重要です。
  • と交換nullthisます。すべてJComponentがですImageObserver
于 2012-08-17T19:32:14.257 に答える
2

JFrameはJComponentではないことに注意してください!実際、paintComponents(Graphics)メソッドは決して呼び出されません。修正は、JPanelをサブクラス化し、サブクラス化されたパネルをコンテンツペインとしてフレームに追加することです。パネルでメソッドをオーバーライドしますpaintComponents(Graphics)

于 2012-08-17T19:32:17.063 に答える