Rumah >Java >javaTutorial >Bagaimana untuk Mengubah Warna Butang Secara Dinamik dalam Java Swing Berdasarkan Status Pangkalan Data?

Bagaimana untuk Mengubah Warna Butang Secara Dinamik dalam Java Swing Berdasarkan Status Pangkalan Data?

DDD
DDDasal
2024-12-26 15:09:14684semak imbas

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

Warna Butang Java Swing

Dalam contoh ini, kami meneroka cara menukar warna butang dalam Java Swing secara dinamik berdasarkan perubahan tertentu dalam status pangkalan data. Matlamat kami adalah untuk menetapkan hijau pada butang yang mewakili meja tanpa pengawasan di restoran, oren kepada yang menunggu pesanan dan melaksanakan kesan berkelip untuk jadual dalam proses.

Untuk menukar warna butang, kami boleh memanfaatkan kaedah setForeground() dan setBackground(). Untuk menukar warna teks, kami menggunakan setForeground(), tetapi ambil perhatian bahawa setBackground() mungkin tidak menghasilkan hasil yang konsisten merentas platform yang berbeza. Oleh itu, kami mengesyorkan menggunakan panel berwarna sebaliknya, seperti yang ditunjukkan dalam coretan kod di bawah:

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

Dalam kod ini, kelas dalaman ButtonPanel memanjangkan JPanel dan menyertakan butang dengan teksnya yang mengenal pasti nombor butang. Kaedah setBackground() digunakan untuk menetapkan warna setiap panel butang secara dinamik.

Untuk melaksanakan kesan berkelip bagi butang yang menunjukkan jadual dalam proses, anda boleh menggunakan objek Pemasa. Pemasa akan mencetuskan ActionEvent pada selang masa yang tetap, dan dalam pengendali acara, anda boleh menukar warna butang untuk mencipta kesan berkelip.

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Warna Butang Secara Dinamik dalam Java Swing Berdasarkan Status Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn