我有一个简单的Java程序,允许用户在JPanel上绘制矩形,然后移动它们,调整它们并删除它们。
绘图面板实现了MouseListener和MouseMotionListener。触发事件时,它会检查选择了哪个菜单选项(新矩形,移动,调整大小或删除),并做出相应的反应。
当选择'resize'选项时,监听器的方法执行以下操作:
MouseMoved调用boolean detectBoundary()。当返回true时,边界所属的矩形将被设置为活动矩形。
MouseDragged调用void moveBoundary,它会在拖动手势的方向上移动检测到的边界。
现在我正在寻找的方法是让将要移动的边界脱颖而出。我可以用较粗的线条或不同的颜色重新绘制整个矩形,这就是我现在在设置给定矩形作为活动矩形时所做的,但这不是我想要的。我想重新着色一个边界。
可以处理BorderFactory的createMatteBorder方法的setBorder方法似乎是出于这些目的的理想选择,但我还没有找到一种方法来实现这一目的。
有没有人知道我怎么能做到这一点?
非常感谢所有建议。
答案 0 :(得分:0)
你可以在java.awt.Graphics上调用setColor(Color color)方法吗?
听起来你可能会要求更复杂的东西,但我不确定究竟是什么。 如果你想在同一个矩形上有两种不同的边界颜色,我认为你必须使用两个矩形对象才能做到这一点。顶部矩形将具有透明填充。两个矩形需要一起移动,移动完成后需要从视图中移除第二个矩形。
我不确定是否可以改变一个简单矩形的一个边缘的颜色,但是你可以用多个形状构建一个更复杂的形状,或者你可以将你的矩形绘制成一个BufferedImage并绘制顶部有一条不同颜色的线条。
答案 1 :(得分:0)
BorderFactory类通常用于为Swing组件创建边框,所以我不确定这是否也适用于您的情况。您是否尝试创建带边框的新面板
JPanel panel = new JPanel();
Border mb = (BorderFactory.createMatteBorder (0, 5, 0, 0, Color.red);
panel.add(mb);
然后将Rectangle添加到面板并将其添加到您实际绘制的现有面板中?