【问题标题】:Swing paint program - How to handle selection?Swing 绘画程序 - 如何处理选择?
【发布时间】:2017-11-04 01:37:03
【问题描述】:

我正在尝试使用 swing 制作绘画程序。我有几种用户可以绘制的形状,包括椭圆、线条和矩形。可以使用各种笔划(线条粗细)绘制(使用 graphics2d)形状,并且可以填充或不填充。

我正在尝试实现一个功能,以便用户可以用鼠标右键单击一个形状并拖动它来移动它。

我目前的策略是轮询形状数组是逆序的(意思是在多个形状的情况下,选择最近添加的一个)。

每个形状实现都有一个名为isSelected(int x, int y) 的方法。我需要弄清楚如何确定一个点是否落在形状上。一个挑战是在内部单击时不应选择椭圆等未填充的形状,但如果已填充则应选择它。此外,选择应该响应笔画的粗细。也就是说,如果线条使用较粗的笔划,则应该通过单击外部区域来选择线条,而不仅仅是线条的确切中心。

我到底该如何实现呢?

【问题讨论】:

  • 问题取决于“如何”存储形状。 Java 的图形 2d API 支持Shape 的概念,并带有许多预定义的形状。这些包含确定给定点是否在其范围内的能力
  • 我正在存储一个自定义类型的数组,它通过这个 API 实现了一个 2d 形状

标签: java swing graphics paint graphics2d


【解决方案1】:

我正在存储一个自定义类型的数组,它通过这个 API 实现了一个 2d 形状

那么你可以使用:

取决于您拥有的信息以及您要检查的内容

【讨论】:

  • 这可行,但不处理填充/未填充形状的逻辑。
  • 你是什么意思?由于我不了解您如何实际实施任何内容,因此很难提出进一步的建议
  • @Airhead MadProgrammer 的建议应该能够处理填充和未填充的形状。你测试过吗?
  • 是的,我已经测试过了。我不希望从内部选择未填充的形状,它们目前就是这样。
  • @Airhead 好吧,在这种情况下,您只想测试鼠标点是否在形状的边界上。这假设您乐于处理形状的矩形边界而不是形状本身。如果你想知道他们是否点击了圆的边缘(例如)它变得更加复杂,那么你需要执行一些交叉计算。我会计算从形状中心到鼠标点的角度,然后我会计算这个角度所代表的圆中的点,然后确定鼠标点是否落在它的指定范围内
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
相关资源
最近更新 更多