将JPanel的轴心点设置为其中心

时间:2013-08-12 12:30:11

标签: java swing jpanel awt shape

我正在构建一个Java应用程序,它将具有两个随机大小的圆圈,需要用户点击。将测量点击第一个和第二个圆圈之间的时间。不幸的是,因为我是Java的新手,所以对我来说速度很慢。目前我有我的应用程序绘制圆圈并使用System.nanoTime()测量点击之间的时间,但现在我遇到了问题。

因为圆圈需要彼此相距固定距离,所以我想使用圆心作为原点。所以基本上我希望能够为圆提供坐标,以便圆的中心位于那些坐标处。然后圆圈之间的距离描述了中心之间的距离。我的圈子当前嵌入了JPanel,但如果我设置了JPanel的位置,它会将左上角移动到该位置。

当然,我已经做了一些搜索阅读,我可能需要玩弄任何的AffineTransform或Graphics2D.translate(),我在的paintComponent(试图),但这有一个有点混乱,所以后来我试图重写setlocation核减距离位置的半径。它有点工作,但它不是最干净的解决方案。 aonyone可以给我一些关于如何做到这一点的指示吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果我理解问题陈述,那么所有这样的圆圈对将位于围绕围板的圆心的两侧,如图here所示。只需选择随机0≤θ<0。 π并在π - θ处找到它的对立面。请注意示例的渲染如何在调整面板大小时进行缩放。

image

另外,该示例使用setPreferredSize()来确定绘图面板的尺寸,但您可能希望覆盖getPreferredSize()

附录:example使用fillOval()来渲染圈子,但您可以draw()使用任何所需的Shape;后者提供了几种适用于命中测试的contains()方法,如上所述here

答案 1 :(得分:0)

圆圈(x1,y1)和(x2,y2)的两个中心的坐标。 半径的大小是随机的。 一旦你得到了两个半径r1和r2,只需将它们定位在(x1-r1,y1-r1)和(x2-r2,y2-r2)。

您可以使用java.awt.Point来表示中心,并使用

center.translate(-radius, -radius)

并使用新的翻译值作为绘图的位置。

也许您认为这不是一个干净的解决方案,但为什么不呢? Java中的所有内容都是通过给位置的左上角绘制的,因此使用不干净的中心:)。 通过做-radius计算左上角位置是干净的:)