Pregunta

Tengo un JButton que, cuando se pulsa, cambia el color de fondo de activo a lo normal:

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

Quiero desaparecer el color del botón activa de nuevo al color del botón normal cuando una tarea específica ha terminado de ejecutarse. Estoy usando SwingWorker y se preguntó si alguien podría sugerir una forma eficaz de hacer esto por favor?

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: Para que quede claro, yo estoy buscando una manera eficiente a desvanecerse los valores RGB para activeButtonColor de nuevo a normalButtonColor, sin tener que crear un gran número de objetos Color. ¿Es posible? O es que sólo hay que limitar el número de pasos de fundido para ser más eficiente?

¿Fue útil?

Solución

Crear un método que toma 3 argumentos, un botón, una de color y el color. Dentro del método, crear un SwingWorker para funcionar en el fondo que hace el desvanecimiento de los colores.

A continuación, en su ActionListener en el que hacer su trabajo, antes de hacer nada, llama al método de desvanecimiento de activa a la normalidad. Cuando su hecho, llame al método de fundido de normal a activo.

Usted va a terminar con 3 swingworkers totales se utilizan en esta situación. Uno para su trabajo, uno para la primera desaparecer y otro para el último desvanecimiento.

Otros consejos

Los objetos en color deben ser bastante ligero; que son básicamente sólo cuatro flotadores, además de un puñado de punteros a objetos ya existentes. Si realmente quiere ahorrar en instancias de objetos de color, y que te van los colores de inicio y finalización de arriba no va a cambiar, se puede calcular previamente los objetos de color para la secuencia de desvanecimiento, pero estoy bastante seguro de que podría calcular sobre la marcha así, y sufrir ninguna consecuencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top