3

私のアプリケーションレイアウトは次のようなものです:カスタムJPanelを含む標準JPanelを含むカスタムJFrame(GUIの作成を処理するだけ)

MinimapPanel と呼ばれるカスタム JPanel 内で、ペイント メソッドを変更しました。

    //in a constructor:
    scaledTransform = new AffineTransform(); = new AffineTransform();
    scaledTransform = new AffineTransform();
    scaledTransform.scale(scaleAmount, scaleAmount);
    //...
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);

    Graphics2D g2d = (Graphics2D) g;
    g2d.setTransform(scaledTransform);
    mapDrawer.paintMinimap(g, seatMap, miniViewHandler);//it just calls a bunch of fillRect

    if (viewRect != null) {
        g.setColor(new Color(255, 0, 0));
        int x = viewRect.x;
        int y = viewRect.y;
        g.drawRect(x, y, Math.abs(viewRect.width), Math.abs(viewRect.height));
    }
    g2d.setTransform(plainTransform);
}

trasform を適用しない場合、またはスケーリングが 1.0 (なし) の場合はすべて正常に動作しますが、スケーリングすると、JFrame が再描画されるたびに MinimapPanel が空白のままになります。

私が間違っている可能性があることについてのアイデアはありますか?

4

1 に答える 1

5

明確な変換を使用しないでください。以前のコンポーネントは、たとえば子の位置などに独自の変換を追加しますtranslate()。代わりに、このようなコードを呼び出します

AffineTransform old=g2d.getTransform();
//do your changes here
g2d.scale(scaleAmount, scaleAmount);
//paint
g2d.setTransform(old);
于 2012-04-11T13:52:17.877 に答える