2

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

绘制我正在使用的线('rootNode'和'child'都是JButtongGraphics覆盖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/

4

1 回答 1

3

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

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

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

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

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

除了在错误的位置之外,转换为屏幕坐标还会产生根据窗口在屏幕上的位置改变线条位置的效果:)

于 2012-11-22T21:32:45.207 回答