在 Java 中突出显示 JLabel 上的部分图像图标

Highlight Part of Image Icon on JLabel in Java

我有一张地图图片。当用户单击一个按钮时,我想像这样在地图的某个位置放置一个红色方框作为高亮显示:

如何突出显示这样的部分? 目前,我通过创建一个突出显示该区域的新图像并在用户单击按钮时加载该图像来实现这一点。但是在这种情况下,我将不得不开发 66 张图像并为每个按钮加载一张。

扩展 JLabel 以进行自定义绘画。

您将保留 ArrayListRectangles 想要绘制的。当您单击一个按钮时,您将 Rectangle 添加到 ArrayList。然后在 paintComponent(...) 方法中迭代 ArrayList 来绘制每个 Rectangle.

所以 JLabel 扩展的基本变化是:

private ArrayList<Rectangle> rectangles = new ArrayList<Rectangle>();

...

@Override
protected void paintComponent(Graphics g)
{
    super.paintComponent(g);

    for (Rectangle r: rectangles)
    {
        g.setColor( Color.RED );
        g.drawRect(...);
    }
}

public void addRectangle(Rectangle r)
{
    rectangles.add( r );
}

有关此方法的工作示例,请查看 Custom Painting Approaches 中的 DrawOnComponent 示例。

另一种选择可能是使用 JLayer 在 JLabel 上绘制矩形。阅读 Swing 教程中关于 How to Decorate Component With the JLayer Class 的部分以获得一些工作示例。

无论哪种方式,您都需要进行自定义绘画。尝试两种方法,看看您更喜欢哪一种。