2012-04-11 38 views
2

我的應用程序佈局是一樣的東西: 定製的JFrame(這只是處理圖形用戶界面的創建),它包含一個標準的JPanel其中包含自定義的JPanel的JPanel不畫

定製的JPanel內,這就是所謂MinimapPanel,我改變了paint方法:

//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保持空白。

關於我可能做錯什麼的想法?

+0

代碼爲更好地幫助越早,張貼[SSCCE(http://sscce.org/)。 – 2012-04-11 15:21:22

+0

感謝您的領導! – Enoon 2012-04-13 09:42:19

回答

4

請勿使用清晰的轉換。先前的組件添加它們自己的變換例如translate()兒童位置等而這樣調用

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

另請參閱此相關的[示例](http://stackoverflow.com/a/9373195/230513)。 – trashgod 2012-04-11 15:38:01

+0

感謝您的支持,我對Swing很陌生。實際上解決問題的方法是使用「g2d.scale(amount,amount)」而不是「g2d.setTransform(trasform)」任何想法爲什麼? – Enoon 2012-04-11 15:39:38

+0

正如我所說的,JComponents通過使用translate()在繪製小孩(對於每個小孩的0)之前將其置於0來更改轉換。 – StanislavL 2012-04-12 05:48:04