Home >Java >javaTutorial >How to Dynamically Change Button Colors in Java Swing Based on Database Status?
In this example, we're exploring how to dynamically change the colors of buttons in Java Swing based on specific changes in a database status. Our goal is to assign green to buttons representing unattended tables in a restaurant, orange to those with pending orders, and implement a flashing effect for tables under process.
To change the colors of the buttons, we can leverage the setForeground() and setBackground() methods. For changing the text color, we use setForeground(), but note that setBackground() may not yield consistent results across different platforms. Hence, we recommend using a colored panel instead, as demonstrated in the code snippet below:
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<>(); 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(); } }); } }
In this code, the ButtonPanel inner class extends JPanel and includes a button with its text identifying the button number. The setBackground() method is used to set the color of each button panel dynamically.
To implement a flashing effect for buttons indicating tables under process, you can use a Timer object. The Timer will trigger an ActionEvent at regular intervals, and within the event handler, you can change the color of the button to create a flashing effect.
The above is the detailed content of How to Dynamically Change Button Colors in Java Swing Based on Database Status?. For more information, please follow other related articles on the PHP Chinese website!