2010-08-06 24 views
7

Uygulamamı LINUX içinde geliştirmek için NET Fasulye IDE kullanıyorum. Yeni görünüm ve his yaratmak için synthetica paketini kullandım. Şimdiye kadar her şey yolunda.Java Swing düğmesi renkleri

Şimdi bir sonraki adım, bazı veritabanı durumları değiştiğinde düğmelere renkler eklemektir. Örneğin

:

bir restoranda i 2 tablolar ve 8 kişi geldi yemek ve insanlar sahipsiz olduğundan ben olmak o 2 tablolara düğmeleri istiyorum benim yazılımda 2 tablo yaratacak yeşil. Sipariş, bu tablolardan herhangi biri için işlendiğinde, işlenmiş tablonun düğme rengi turuncuya dönüştürülmelidir. İşlem altında olduğunda renk yanıp sönüyor olmalıdır. Bunu java'da nasıl yapabilirim? Veritabanının güncellenmesiyle ilgileneceğim sadece düğmelerin renklerinin nasıl değiştirileceğini ve yanıp sönen tekniklerin nasıl ekleneceğini bilmek istiyorum.

cevap

14

Burada, bir bileşenin yanıp sönmesiyle ilgili bir question and several answers belirtilmiştir.

Ek: How to Use Buttons numaralı makalede daha fazla bilgi edinebilirsiniz. Özellikle, bir düğmenin metninin rengini değiştirmek için setForeground()'u kullanabilirsiniz, ancak ilgili setBackground() bazı platformlarda iyi okuma yapamaz. Bir Border kullanılması bir alternatiftir; Aşağıda gösterilen renkli bir panel diğeridir. Kullanma

enter image description here

package overflow; 

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

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

'[buradan] gösterilen butona setOpaque' (doğru), aynı zamanda etkili bir ajan (http://stackoverflow.com/a/9852024/230513). – trashgod

+0

Swing'in bu kadar güzel olabileceğini hiç düşünmemiştim. –

+0

@TimothyLeung: Java 2D ve Aqua/Quartz için Kredi; ayrıca bkz. "Color.getHSBColor()", görüldü [burada] (http://stackoverflow.com/a/9875534/230513). – trashgod