当未最大化时,线被绘制在错误的位置

时间:2012-11-22 20:51:03

标签: java swing graphics awt

我已扩展JPanel并覆盖paint方法,以便在面板内某些JButton的位置之间绘制一些额外的行。但是,只有当gui最大化时才会正确绘制线条,否则它们将以完全错误的偏移绘制。

要绘制我正在使用的行('rootNode'和'child'都是JButtong是覆盖Graphics方法的paint参数:

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/

1 个答案:

答案 0 :(得分:3)

只是为了掩盖评论。在这种情况下,我认为您不想转换为屏幕坐标。

Graphics方法的paintComponent(...)上下文很可能会为组件坐标系设置。

Graphics.drawLine(...)的JavaDoc状态:

  

使用当前颜色在点(x1,y1)和之间绘制一条线   (x2,y2)在此图形上下文的坐标系中。

除非您已通过Graphics.translate(...)Graphics2D.setTransform(...)做了更改,否则将为该组件设置坐标系。

除了在错误的地方,转换为屏幕坐标将具有根据窗口在屏幕上的位置改变线条位置的效果:)