Выделить часть значка изображения на JLabel в Java - PullRequest
0 голосов
/ 25 августа 2018

У меня есть изображение карты. Когда пользователь нажимает кнопку, я хочу поставить красный квадрат в качестве выделения на определенном месте карты, например:

enter image description here

Как мне выделить такую ​​часть? В настоящее время я достигаю этого, создавая новое изображение с выделением этой области и загружая его, когда пользователь нажимает кнопку. Однако в этом случае мне придется разработать 66 изображений и загрузить по одному для каждой кнопки.

1 Ответ

0 голосов
/ 25 августа 2018

Расширьте 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 );
}

В качестве рабочего примера этого подхода посмотрите пример DrawOnComponent, приведенный в Пользовательские подходы к рисованию .

Другим вариантом может быть использование JLayer для рисования прямоугольников на JLabel. Прочитайте раздел из учебника по Swing по Как украсить компонент с помощью класса JLayer для некоторых рабочих примеров.

В любом случае вам нужно сделать заказную покраску. Попробуйте оба подхода, чтобы увидеть, какой вы предпочитаете.

...