@Alex_F152

Java swing. как переопределять paintComponent() несколько раз, в зависимости от нажатой кнопки?

Создаю графический элемент программы. Опыта конечно в этом практически нет. На BufferedImage, помещенный на JLabel пытаюсь создать графику, которая будет изменятся при нажатии различных JButton. Для этого использую оверрайдинг paintComponent(). (Если есть варианты получше, прошу не стесняться, и подсказать, просто у меня на примете ничего другого нет =) ) Пробовал создать несколько Consumer с вариантами переопределения, но что именно выставить в условии самого свитча так и не додумался. В итоге мое "извращение" на данный момент выглядит примерно так
@Override
    protected void  paintComponent(Graphics g) {
        super.paintComponent(g);
      if(button16.isSelected()) {
        cons.accept(g);
      }
    }
    Consumer cons = (g) -> {
        Graphics g2d = (Graphics2D) g.create();
        g2d.fillOval(getWidth()-230, getHeight()-170, 16,16);
        g2d.dispose();

    };

Пробовал при нажатии кнопки создать таг, а потом просто в условии paintComponent() прочитать его. В итоге вышла полная белеберда ... Даже выкладывать это не буду.... Основная суть вопроса : как в данном случае синхронизировать нажатие кнопки и переопределение paintComponent()? (доп. : как реализовать условие в switch(условие) для данного случая?)
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 1
@odissey_nemo
Программист, ГИС-системы, растры, космоснимки
Давно Свингом не занимался, но скоро буду)) Пока есть только предложение - раз есть один BufferedImage, что мешает заменять его на другой прямо по ссылке, не перерисовывая имеющийся (создав-закачав нужное предварительно из ресурса или с диска), и потом уже вызывать paintCоmponent (repaint?) сразу после замены?

И не проще ли использовать файлы Icon, а не BufferedImаge, который достаточно низкоуровневый? Но это, конечно, только для случая, когда иконки статические, не динамически рисуемые.

Или даже назначать для всех кнопок разный статус и после этого вызывать repaint в обработчиках нажатия, в котором уже по свитчу статуса отрисовывать и графику, соответствующую оному (идентификатору последней нажатой кнопки, практически).

Сами механизмы забыл, пишу только общие соображения. Позже найду примеры собственные и вспомню))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы