2010-08-06 13 views
7

Estoy usando NET Beans IDE para desarrollar mi aplicación en LINUX. He usado el paquete synthetica para generar una nueva apariencia. Todo está bien hasta ahora.Colores del botón Java Swing

Ahora mi siguiente etapa es agregar colores a los botones cuando algún estado de la base de datos cambia.

Por ejemplo:

En un restaurante tengo 2 mesas y cuando 8 personas vinieron a cenar y crearé 2 mesa en mi software, ya que las personas son desatendidos quiero los botones a los 2 mesas para estar verde. Cuando la orden se procesa para cualquiera de esas tablas, el color del botón de la tabla procesada debe cambiarse a naranja. Cuando está en proceso, debe ser un color intermitente. ¿Cómo hacer esto en Java? Me ocuparé de la actualización de la base de datos. Solo quiero saber cómo cambiar los colores de los botones y cómo agregar la técnica de flasheo.

Respuesta

14

Aquí hay un question and several answers relacionado con el flasheo de un componente.

Adición: Puede obtener más información en el artículo How to Use Buttons. En particular, puede usar setForeground() para cambiar el color del texto de un botón, pero el setBackground() correspondiente no se lee bien en algunas plataformas. Usar una Border es una alternativa; un panel de color, que se muestra a continuación, es otro.

enter image description here

package overflow; 

import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Random; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.Timer; 

public class ButtonTest extends JPanel implements ActionListener { 

    private static final int N = 4; 
    private static final Random rnd = new Random(); 
    private final Timer timer = new Timer(1000, this); 
    private final List<ButtonPanel> panels = new ArrayList<ButtonPanel>(); 

    public ButtonTest() { 
     this.setLayout(new GridLayout(N, N, N, N)); 
     for (int i = 0; i < N * N; i++) { 
      ButtonPanel bp = new ButtonPanel(i); 
      panels.add(bp); 
      this.add(bp); 
     } 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     for (JPanel p : panels) { 
      p.setBackground(new Color(rnd.nextInt())); 
     } 
    } 

    private static class ButtonPanel extends JPanel { 

     public ButtonPanel(int i) { 
      this.setBackground(new Color(rnd.nextInt())); 
      this.add(new JButton("Button " + String.valueOf(i))); 
     } 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame f = new JFrame("ButtonTest"); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       ButtonTest bt = new ButtonTest(); 
       f.add(bt); 
       f.pack(); 
       f.setLocationRelativeTo(null); 
       f.setVisible(true); 
       bt.timer.start(); 
      } 
     }); 
    } 
} 
+1

Uso de 'setOpaque (true)' en el botón también es eficaz, como se muestra [aquí] (http://stackoverflow.com/a/9852024/230513). – trashgod

+0

Nunca me he dado cuenta de que Swing puede ser tan bonito –

+0

@TimothyLeung: Credit to Java 2D y Aqua/Quartz; ver también 'Color.getHSBColor()', visto [aquí] (http://stackoverflow.com/a/9875534/230513). – trashgod