2012-04-11 4 views
2

私のアプリケーションのレイアウトがあるようなもの: カスタムカスタムJPanelの内側カスタムJPanelのJPanelのは、ペイントしない

が含まれている標準のJPanelが含まれています(ただ、GUIの作成を担当)のJFrame 、MinimapPanelと呼ばれる、私は塗装方法に変更:私はtrasformを適用しない場合、すべてが正常に動作、またはスケーリングが1.0(なし)であれば、私はスケール場合、毎回

//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); 
} 

をJFrameが再描画されると、MinimapPanelは空白のままです。

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

+0

のようなコードを呼び出す[SSCCE](http://sscce.org/)を投稿してください。 –

+0

ヘッドアップありがとう! – Enoon

答えて

4

クリアトランスフォームを使用しないでください。以前のコンポーネントは独自の変換を追加します。など子どもの位置にtranslate()はむしろ、早いほど良いヘルプについてこの

AffineTransform old=g2d.getTransform(); 
//do your changes here 
g2d.scale(scaleAmount, scaleAmount); 
//paint 
g2d.setTransform(old); 
+0

この関連[example](http://stackoverflow.com/a/9373195/230513)も参照してください。 – trashgod

+0

頭がおかげでありがとう、私はかなりスイングに新しいです。実際に問題を修正したのは、 "g2d.setTransform(trasform)"ではなく "g2d.scale(amount、amount)"を使用していたことです。 – Enoon

+0

JComponentsは、translate()を使用して子を描画する前に(各子の0に対して)0に配置することによって変換を変更すると述べました。 – StanislavL

関連する問題