Frage

Ich habe eine JButton, die, wenn sie gedrückt wird, Hintergrundfarbe von der aktiven in den normalen ändert:

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

Ich möchte die aktive Schaltfläche Farbe wieder in der normalen Taste Farbe verblassen, wenn eine bestimmte Aufgabe beendet hat ausgeführt. Ich verwende SwingWorker und fragte sich, ob jemand könnte einen effizienten Weg vorschlagen, dies zu tun, bitte?

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();
  }
});

EDIT: Just klar zu sein, ich bin für einen effizienten Weg, um die RGB-Werte für activeButtonColor zurück zu normalButtonColor verblassen, ohne eine große Anzahl von Color Objekten erstellen zu müssen. Ist es möglich? Oder muss ich nur die Zahl der Fade Schritte begrenzen effizienter zu sein?

War es hilfreich?

Lösung

Erstellen Sie eine Methode, die drei Argumente annimmt, einen Knopf, eine von Farbe und Farbe. Innerhalb der Methode erstellen eine Swingworker im Hintergrund laufen zu lassen, die die verblassen die Farben der Fall ist.

Dann auf Ihrer Action, wo Sie Ihre Arbeit zu tun, bevor Sie etwas tun, die Fade-Methode aus dem aktiven normal nennen. Wenn ihre getan, rufen Sie die Fade-Methode von normal zu aktiv.

Sie werden am mit 3 insgesamt swingworkers Ende in dieser Situation verwendet werden. Ein für Ihre Arbeit, eine für die erste verblasst und einen für die letzten verblassen.

Andere Tipps

Farbe Gegenstände sollten ziemlich leicht sein; sie sind im Grunde nur vier Schwimmer und eine Handvoll von Zeigern Objekte bestehende Pre. Wenn Sie wirklich auf Farbe Objektinstanziierung speichern mögen, und Sie sind sicher, dass die Start- und Ende oben Farben werden mich nicht ändern, können Sie die Farbobjekte für die Fade-Sequenz vorauszuzuberechnen, aber ich bin ganz sicher, man kann sich on the fly berechnen als auch, und keine Konsequenzen zu tragen haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top