java - 将 JPanel 的枢轴点设置为其中心

标签 java swing jpanel awt shapes

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

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

当然,我已经做了一些搜索阅读,我可能需要使用 AffineTransform 或 Graphics2D.translate() ,我在 PaintComponent() 中尝试过,但这有点令人困惑,所以然后我尝试覆盖 setlocation 并减去距离该位置的半径。它有点有效,但它不是最干净的解决方案。有人可以给我一些关于如何执行此操作的指示吗?

提前致谢。

最佳答案

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

image

顺便说一句,该示例使用 setPreferredSize() 来建立绘图面板的尺寸,但您可能希望覆盖 getPreferredSize()相反。

附录:example使用 fillOval() 渲染圆形,但您可以将 draw() 与任何所需的 Shape 一起使用;后者提供了几个适合 HitTest 的 contains() 方法,如前面提到的 here .

关于java - 将 JPanel 的枢轴点设置为其中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18187040/

相关文章:

java - 滚动 JScrollPane 到底部

Java 控制台 JPanel

java - hashmap已更新,但从未查询过android studio

java - 如何解决启动ApplicationContext时出错

Java程序无法作为Java应用程序运行

java - JSch 中断命令执行

java - Java 中的 Oracle 查询

java - 在 Java 中以电子邮件地址命名包,当所述电子邮件地址在 "@"符号之前包含句点时

java - 如何通过单击 GUI 中的按钮来更改面板的内容?

Java:新组件什么时候会显示在屏幕上?