Как я могу наилучшим образом реализовать эффект Fade Button в Swing? - PullRequest
2 голосов
/ 03 апреля 2009

У меня есть JButton, который при нажатии меняет цвет фона с активного на обычный:

final Color activeButtonColor = new Color(159, 188, 191);
final Color normalButtonColor = new Color(47, 55, 56);

Я хочу, чтобы цвет активной кнопки вернулся к нормальному цвету кнопки, когда конкретное задание будет завершено. Я использую SwingWorker и хотел бы знать, если кто-нибудь может предложить эффективный способ сделать это, пожалуйста?

button.addActionListener(new ActionListener() {
  public void actionPerformed(final ActionEvent event) {

    new SwingWorker<Object, Object>() {

      protected Object doInBackground() throws Exception {
        button.setBackground(activeButtonColor);
        for (int note = 60; note < 120; note++) {
          midiController.sendMidiMessage(1, note, 83);
          midiController.stopMidiMessage(note, 83);
        }
        Thread.sleep(200);
        return null;
      }

      protected void done() {
        try {
          Object result = get();

          // Fade back
        } catch (Exception ex) {
          ex.printStackTrace();
          if (ex instanceof java.lang.InterruptedException)
            return;
        }
      }
    }.execute();
  }
});

РЕДАКТИРОВАТЬ: Просто чтобы прояснить, я ищу эффективный способ постепенного уменьшения значений RGB для activeButtonColor обратно до normalButtonColor, без необходимости создавать огромное количество Color объекты. Является ли это возможным? Или мне просто нужно ограничить количество шагов затухания, чтобы быть более эффективными?

Ответы [ 2 ]

1 голос
/ 03 апреля 2009

Создайте метод, который принимает 3 аргумента, кнопку, от цвета до цвета. Внутри метода создайте свингера, работающего в фоновом режиме, который затухает.

Затем на вашем листе действий, где вы выполняете свою работу, прежде чем что-либо делать, вызовите метод fade от активного до обычного. Когда это будет сделано, вызовите метод постепенного изменения от нормального до активного.

В итоге вы получите 3 рабочих-качелей в этой ситуации. Один для вашей работы, один для первого исчезновения и один для последнего исчезновения.

0 голосов
/ 03 апреля 2009

Цветные объекты должны быть достаточно легкими; в основном это просто четыре числа с плавающей точкой и несколько указателей на уже существующие объекты. Если вы действительно хотите сэкономить при создании экземпляра объекта Color и уверены, что начальный и конечный цвета, указанные выше, не изменятся, вы можете предварительно вычислить объекты Color для последовательности затухания, но я совершенно уверен, что вы можете вычислить их на лету а также, и не страдают от последствий.

...