Heim >Java >javaLernprogramm >Wie ändere ich die Schaltflächenfarben in Java Swing basierend auf dem Datenbankstatus dynamisch?

Wie ändere ich die Schaltflächenfarben in Java Swing basierend auf dem Datenbankstatus dynamisch?

DDD
DDDOriginal
2024-12-26 15:09:14687Durchsuche

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

Java Swing-Schaltflächenfarben

In diesem Beispiel untersuchen wir, wie man die Farben von Schaltflächen in Java Swing basierend auf bestimmten Änderungen in einem Datenbankstatus dynamisch ändern kann. Unser Ziel ist es, Schaltflächen für unbesetzte Tische in einem Restaurant Grün zuzuweisen, Schaltflächen mit ausstehenden Bestellungen Orange zuzuweisen und einen Blinkeffekt für in Bearbeitung befindliche Tische zu implementieren.

Um die Farben der Schaltflächen zu ändern, können wir die nutzen setForeground()- und setBackground()-Methoden. Zum Ändern der Textfarbe verwenden wir setForeground(). Beachten Sie jedoch, dass setBackground() auf verschiedenen Plattformen möglicherweise keine konsistenten Ergebnisse liefert. Daher empfehlen wir stattdessen die Verwendung eines farbigen Panels, wie im folgenden Codeausschnitt gezeigt:

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 diesem Code erweitert die innere Klasse ButtonPanel JPanel und enthält eine Schaltfläche, deren Text die Schaltflächennummer identifiziert. Die setBackground()-Methode wird verwendet, um die Farbe jedes Schaltflächenfelds dynamisch festzulegen.

Um einen Blinkeffekt für Schaltflächen zu implementieren, die auf in Bearbeitung befindliche Tabellen hinweisen, können Sie ein Timer-Objekt verwenden. Der Timer löst in regelmäßigen Abständen ein ActionEvent aus und im Event-Handler können Sie die Farbe der Schaltfläche ändern, um einen Blinkeffekt zu erzeugen.

Das obige ist der detaillierte Inhalt vonWie ändere ich die Schaltflächenfarben in Java Swing basierend auf dem Datenbankstatus dynamisch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn