【问题标题】:Can a single java.awt.Rectangle be painted with two different boundary colors?可以用两种不同的边界颜色绘制单个 java.awt.Rectangle 吗?
【发布时间】:2010-02-21 18:30:12
【问题描述】:

我有一个简单的 Java 程序,它允许用户在 JPanel 上绘制矩形,然后移动它们、调整它们的大小并删除它们。

绘图面板实现了 MouseListener 和 MouseMotionListener。触发事件时,它会检查选择了哪个菜单选项(新矩形、移动、调整大小或删除),并做出相应反应。

选择“调整大小”选项时,侦听器的方法执行以下操作:

  • MouseMoved 调用布尔检测边界()。当返回 true 时,边界所属的矩形被设置为活动矩形。

  • MouseDragged 调用 void moveBoundary,它将检测到的边界沿拖动手势的方向移动。

现在我正在寻找一种使要移动的边界突出的方法。我可以用较粗的线条或不同的颜色重新绘制整个矩形,这是我现在将给定矩形设置为活动矩形时所做的,但这不是我想要的。我想只为一个边界重新着色。

可以处理 BorderFactory 的 createMatteBorder 方法的 setBorder 方法似乎非常适合这些目的,但我还没有找到一种方法来实现它。

这里有人知道我如何做到这一点吗?

我们将不胜感激所有建议。

【问题讨论】:

    标签: java awt


    【解决方案1】:

    能否调用 java.awt.Graphics 上的 setColor(Color color) 方法?

    听起来您可能要求更复杂的东西,但我不确定具体是什么。 如果你想在同一个矩形上有两种不同的边界颜色,我认为你必须使用两个矩形对象来做到这一点。顶部矩形将具有透明填充。这两个矩形需要一起移动,移动完成后需要从视图中移除第二个矩形。

    我不确定是否可以仅更改简单矩形的一个边缘的颜色,但您可以使用多个形状构建更复杂的形状,或者您可以将矩形绘制成 BufferedImage 并绘制顶部有一条不同颜色的线。

    【讨论】:

    • 据我所知,setColor方法属于Graphics类,也就是说我可以在绘制整个矩形之前调用它——g.setColor(Color.RED); g.draw(activeRectangle); ——但不是在我画它的时候。它给了我一个完全红色的矩形,我只想要一个红色的边。
    • 如果这是使用矩形的唯一方法,那么也许我最好只画四条单独的线,这样我就可以调整中间的颜色。我曾希望有一种更优雅的方法,但感谢您帮助我思考这个问题:)。
    【解决方案2】:

    BorderFactory 类通常用于为 Swing 组件创建边框,所以我不确定这是否也适用于您的情况。您是否尝试过创建一个带边框的新面板

    JPanel panel = new JPanel(); 
    Border mb = (BorderFactory.createMatteBorder (0, 5, 0, 0, Color.red); 
    panel.add(mb);
    

    然后将您的 Rectangle 添加到面板中,并将其添加到您实际绘制的现有面板中?

    【讨论】:

    • java.awt.Rectangle 的方便之处在于它相对容易调整大小和移动,因为它存储了自己的坐标、宽度和高度。对于 JPanel 而言,情况并非如此,虽然很可能编写具有 x、y、宽度和高度字段的 JPanel 扩展,但感觉有点像使用火箭筒杀死苍蝇。
    猜你喜欢
    • 2013-05-05
    • 1970-01-01
    • 2015-07-11
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2017-05-23
    相关资源
    最近更新 更多