Maison >Java >javaDidacticiel >Comment modifier dynamiquement les couleurs des boutons dans Java Swing en fonction de l'état de la base de données ?

Comment modifier dynamiquement les couleurs des boutons dans Java Swing en fonction de l'état de la base de données ?

DDD
DDDoriginal
2024-12-26 15:09:14687parcourir

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

Couleurs des boutons Java Swing

Dans cet exemple, nous explorons comment modifier dynamiquement les couleurs des boutons dans Java Swing en fonction de modifications spécifiques de l'état d'une base de données. Notre objectif est d'attribuer du vert aux boutons représentant les tables sans surveillance dans un restaurant, de l'orange à celles avec des commandes en attente, et de mettre en place un effet clignotant pour les tables en cours de traitement.

Pour changer les couleurs des boutons, nous pouvons exploiter le Méthodes setForeground() et setBackground(). Pour changer la couleur du texte, nous utilisons setForeground(), mais notez que setBackground() peut ne pas donner des résultats cohérents sur différentes plates-formes. Par conséquent, nous vous recommandons d'utiliser un panneau coloré à la place, comme démontré dans l'extrait de code ci-dessous :

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

Dans ce code, la classe interne ButtonPanel étend JPanel et inclut un bouton avec son texte identifiant le numéro du bouton. La méthode setBackground() est utilisée pour définir dynamiquement la couleur de chaque panneau de boutons.

Pour implémenter un effet clignotant pour les boutons indiquant les tables en cours de traitement, vous pouvez utiliser un objet Timer. Le Timer déclenchera un ActionEvent à intervalles réguliers, et dans le gestionnaire d'événements, vous pourrez changer la couleur du bouton pour créer un effet clignotant.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn