java - 如何在 JPanel 上绘制与代码相关的矩形作为对象(可以像 Photoshop 一样选择、删除等)

标签 java swing

有没有一种方法可以像在 Photoshop 中一样将形状绘制为离散实体,每个绘制的矩形都是一个可以删除、移动、删除的对象,特别是当删除对象时,我在代码中删除了该对象,并将其从 JPanel 中删除或我在其上绘制的 Canvas ,而不是使用 Canvas 背景绘制相同的对象,我认为这是低效的方式。

例如,当我们使用 Grahpics2D 绘制矩形时,我们使用如下命令。

     @Override
     public void  paintComponent(Graphics canvas){

       super.paintComponent(canvas);

       ((Graphics2D) canvas).drawRect(20,20,100,100);          
      }

现在这个绘制的矩形与左上角的顶点位置以及宽度和高度相关联。它与 Rectangle 对象没有关联,因此在绘制后无法引用矩形。

最佳答案

Now this drawn rectangle is associated with the upper-left vertex position and width and height. It's not associated with Rectangle object so there is no way to refer to the rectangle after it's drawn.

创建 Shape 对象的 ArrayListe。 Shape 对象可以是矩形、椭圆形、多边形等。然后在您的paintComponent(...) 方法中,您迭代ArrayList 来绘制每个Shape。

因此 ArrayList 包含对 Rectangle 的引用。

查看 Custom Painting Approaches 中的 Draw on Component 示例

如果您想真正变得更奇特,请查看 Playing With Shapes 。您可以使您的形状成为一个真实的组件。

关于java - 如何在 JPanel 上绘制与代码相关的矩形作为对象(可以像 Photoshop 一样选择、删除等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47252209/

相关文章:

java - 具有多次相同面板的选项卡式 Pane

java - BorderLayout 内的 BoxLayout

java - 为什么我的 JTable 是空白的

java - 使用正则表达式解析 URL

java - 刷新所有框架中的用户列表

java - 从 swingWorker 处理框架

java - 如何更改 NetBeans 中 JFrame 和 JLabel 之间的空间?

java - 代码需要在 JSP 声明部分中使用 try/catch 而不是在 scriptlet 部分中?

java - 如何在 Windows 10 启动时启动 Eclipse

java - 遍历对象的ArrayList,并返回对象