2

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戻す効率的な方法を探しています。出来ますか?それとも、より効率的にするためにフェードステップの数を制限する必要がありますか?normalButtonColorColor

4

2 に答える 2

1

ボタン、from color、to color の 3 つの引数を取るメソッドを作成します。メソッド内で、色のフェードを行うバックグラウンドで実行するための swingworker を作成します。

次に、作業を行う actionlistener で、何かを行う前に、fade メソッドをアクティブからノーマルに呼び出します。完了したら、fade メソッドを通常からアクティブに呼び出します。

この状況では、合計 3 つの swingworker が使用されることになります。1 つは作業用、1 つは最初のフェード用、もう 1 つは最後のフェード用です。

于 2009-04-02T20:39:28.140 に答える