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

Java 将JPanel的轴心点设置为其中心,java,swing,jpanel,awt,shape,Java,Swing,Jpanel,Awt,Shape,我正在构建一个Java应用程序,它将具有两个随机大小的圆圈,需要用户单击。将测量单击第一个圆和第二个圆之间的时间。不幸的是,由于我是Java新手,所以事情对我来说进展缓慢。目前,我让我的应用程序使用System.nanoTime()绘制圆圈并测量两次单击之间的时间,但现在我遇到了一个问题 因为圆之间需要有一个固定的距离,我想用圆心作为原点。所以基本上我希望能够为圆提供坐标,这样圆的中心应该在这些坐标上。然后,圆之间的距离描述了中心之间的距离。我的圆圈当前嵌入到JPanel中,但如果我设置JPan

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

因为圆之间需要有一个固定的距离,我想用圆心作为原点。所以基本上我希望能够为圆提供坐标,这样圆的中心应该在这些坐标上。然后,圆之间的距离描述了中心之间的距离。我的圆圈当前嵌入到JPanel中,但如果我设置JPanel的位置,它会将左上角移动到该位置

当然,我做了一些搜索阅读,我可能需要使用AffineTransform或Graphics2D.translate(),我在paintComponent()中尝试过,但这有点混乱,因此我尝试覆盖setlocation并从位置减去半径。这有点效果,但不是最干净的解决方案。有人能给我指点怎么做吗


提前感谢。

如果我理解了问题陈述,所有这些圆对将位于以封闭面板为中心的圆的两侧,如图所示。只需随机选择一个0≤ θ<π,并在π-θ处找到它的对立面。请注意,调整面板大小时,示例的渲染是如何缩放的

另一方面,该示例使用
setPreferredSize()
建立图形面板的尺寸,但您可能希望替代


附录:使用
fillOval()
渲染圆,但您可以使用
draw()
和任何所需的
形状
;后者提供了几种适用于命中测试的
contains()
方法,如前所述。

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

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

center.translate(-radius, -radius)
并使用新的转换值作为图形的位置

也许你认为这不是一个干净的解决方案,但为什么不呢?Java中的所有内容都是通过为该位置提供左上角来绘制的,所以使用的是不干净的中心:)。
要通过执行计算左顶部位置-半径是干净的:)

您能提供一些代码吗?我不知道你做了什么。为什么需要覆盖setLocation以在正确的位置绘制圆?