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

时间:2018-08-25 19:34:08

标签: java image swing icons jlabel

我有一张地图图片。当用户单击按钮时,我想在地图的某个位置上放置一个红色方框作为突出显示,如下所示:

enter image description here

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

1 个答案:

答案 0 :(得分:1)

扩展JLabel进行自定义绘画。

您将保留要绘制的ArrayList中的Rectangles。单击按钮时,将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上绘制矩形。阅读How to Decorate Component With the JLayer Class的Swing教程中的部分,获取一些工作示例。

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