Home >Java >javaTutorial >How to Dynamically Change Button Colors in Java Swing Based on Database Status?

How to Dynamically Change Button Colors in Java Swing Based on Database Status?

DDD
DDDOriginal
2024-12-26 15:09:14684browse

How to Dynamically Change Button Colors in Java Swing Based on Database Status?

Java Swing Button Colors

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn