2012-11-22 19 views
2

我擴展了JPanel並覆蓋了paint方法,以便在面板中某些JButton s的位置之間畫出一些額外的線條。但是,只有當gui最大化時纔會正確繪製線條,否則它們將被完全繪製爲錯誤的偏移量。當線條未被最大化時,線條被塗在錯誤的位置

畫我使用的線(「根節點」和「孩子」都是JButtong是重寫paint方法的Graphics參數):

Point sourcePoint = new Point(rootNode.getLocation()); 
Point destPoint = new Point(child.getLocation()); 
SwingUtilities.convertPointToScreen(sourcePoint, rootNode.getParent()); 
SwingUtilities.convertPointToScreen(destPoint, child.getParent()); 
g.drawLine(sourcePoint.x, sourcePoint.y, destPoint.x, destPoint.y); 

不正確的線路圖沒有最大化時: http://postimage.org/image/ws0yo9chf/ 正確時最大化的圖片:http://postimage.org/image/fq84m5xmb/

+0

上線的位置的效果我們展示的圖片 –

+0

你應該重寫'的paintComponent (..)'''JComponent'並在那裏繪畫,而不是'paint(..)'方法。並且不要忘記所有重要的'super.paintComponent(g);'作爲覆蓋'paintComponent()'方法的第一行。 –

+0

覆蓋paintComponent結果的效果相同。我現在要上傳圖片.. – user973758

回答

3

只是爲了掩蓋評論。在這種情況下,我不認爲你想轉換爲屏幕座標。

paintComponent(...)方法的Graphics上下文很可能會爲組件座標系設置。

Graphics.drawLine(...)狀態的JavaDoc:

在該圖形上下文的繪製線,使用當前顏色,點(X1,Y1)和 (X2,Y2)之間的座標系。

除非您已經通過Graphics.translate(...)Graphics2D.setTransform(...)進行了更改,否則將爲該組件設置座標系。

除了在錯誤的地點,轉換爲屏幕座標會改變不同的地方的窗口是屏幕:)