2011-08-28 76 views
2

我想更改我的JLabel的背景颜色。 setBackground()不起作用。它不会改变颜色。这里是我的代码:如何更改JLabel的颜色


import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class Test1 implements AdjustmentListener { 

    static JScrollBar sbarR, sbarG, sbarB; 
    static JLabel lbl; 
    static JPanel panel2; 
    static int r, g, b; 
    static Test1 nb; 

    public static void main(String[] args) { 

     nb = new Test1(); 

     JFrame frame = new JFrame("Test"); 
     frame.setLayout(new GridLayout(1,2)); 
     frame.setBounds(100, 100, 200, 200); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel panel1 = new JPanel(); 
     panel1.setLayout(new GridLayout(1, 3)); 
     panel2 = new JPanel(); 

     lbl = new JLabel(); 
     lbl.setOpaque(true); 

     sbarR = new JScrollBar(Adjustable.VERTICAL, 0, 1, 0, 255); 
     sbarG = new JScrollBar(Adjustable.VERTICAL, 0, 1, 0, 255); 
     sbarB = new JScrollBar(Adjustable.VERTICAL, 0, 1, 0, 255); 

     sbarR.addAdjustmentListener(nb); 
     sbarG.addAdjustmentListener(nb); 
     sbarB.addAdjustmentListener(nb); 

     panel2.add(lbl);   
     frame.add(panel1); 
     frame.add(panel2); 

     panel1.add(sbarR); 
     panel1.add(sbarG); 
     panel1.add(sbarB); 

     frame.setVisible(true); 
    } 

    @Override 
    public void adjustmentValueChanged(AdjustmentEvent e) { 

     r = sbarR.getValue(); 
     g = sbarG.getValue(); 
     b = sbarB.getValue(); 

     lbl.setBackground(new Color(r, g ,b)); 
    } 
}

请任何人都可以帮助我。谢谢。

+0

“它不会工作”不是很精确。你究竟看到了什么? –

+0

@Jon Skeet Sory。我编辑它。 –

回答

5

它不起作用,因为你的标签没有任何文本,所以它的大小是[0,0],因此它根本不可见。用new JLabel("Hello world")构建它,它将按预期工作。

+0

以及我认为标签将设置为整个面板。因为我正在使用网格布局。就像JButtons一样。谢谢...! –

+1

您的整体'JFrame'和panel1正在使用'GridLayout',但您的panel2使用'FlowLayout'的'JPanel'默认值。尝试添加'panel2.setLayout(new BorderLayout());'并用'panel2.add(lbl,BorderLayout.CENTER)'替换'panel2.add(lbl);'使lbl填充panel2的全部。 –

+0

谢谢........! –