2012-12-29 84 views
3

具有「ChangeListener」接口的JSlider,並處理「ChangeEvent」,當滑動條值發生變化時將更改JLabel背景顏色。請幫助我我做不到。 感謝advance.i不能適用的JLabel如何使用JSlider更改JLabel背景顏色

   package org.kodejava.example.swing; 
       import javax.swing.*; 
       import javax.swing.event.ChangeEvent; 
       import javax.swing.event.ChangeListener; 
       import java.awt.*; 
      public class JSliderDemo extends JPanel implements ChangeListener { 
private JTextField field; 

public JSliderDemo() { 
    initializeUI(); 
} 

private void initializeUI() { 
    setLayout(new BorderLayout()); 
    setPreferredSize(new Dimension(400, 100)); 

    // 
    // Creates an instance of JSlider with a horizontal 
    // orientation. Define 0 as the minimal value and 
    // 50 as the maximum value. The initial value is set 
    // to 10. 
    // 
    JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 50, 10); 

    slider.setPaintTicks(true); 
    slider.setPaintLabels(true); 
    slider.setMinorTickSpacing(1); 
    slider.setMajorTickSpacing(10); 

    slider.addChangeListener(this); 

    JLabel label = new JLabel("The Value:"); 
    field = new JTextField(5); 

    JPanel panel = new JPanel(); 
    panel.setLayout(new FlowLayout()); 
    panel.add(label); 
    panel.add(field); 

    add(slider, BorderLayout.NORTH); 
    add(panel, BorderLayout.SOUTH); 
} 

public void stateChanged(ChangeEvent e) { 
    JSlider slider = (JSlider) e.getSource(); 

    // 
    // Get the selection value of JSlider 
    // 
    field.setText(String.valueOf(slider.getValue())); 
} 

public static void showFrame() { 
    JPanel panel = new JSliderDemo(); 
    panel.setOpaque(true); 

    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setTitle("Slider Example"); 
    frame.setContentPane(panel); 
    frame.pack(); 
    frame.setVisible(true); 
} 

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      JSliderDemo.showFrame(); 
     } 
    }); 
} 
} 
+0

我試過,但不可能添加的JLabel裏面 – Suma

+1

下面是JSlider的用的ChangeListener一個例子:http://stackoverflow.com/a/14005539/1133011您只需在ChangeListener stateChanged(..)方法中的JLabel實例上調用setBackground(Color c) –

+1

不要忘記,JLabel默認爲透明,您應該確保在創建後調用了JLabel#setOpaque它。您可能還需要致電JLabel#repaint以鼓勵重繪管理員更新它 – MadProgrammer

回答

6
  1. JLabel是透明的,則必須改變其不透明度JLabel.setOpaque(true)

  2. 閱讀甲骨文教程How to Use Sliders

+3

+1 setOpaque(true)'忘記了那個:O –

0

JLabel的是透明,不能直接改變它的背景顏色。

你可以從一個JLabel延伸並覆蓋paint方法

或改變面板的BGCOLOR。 您將JLabel放在面板上,當滑塊移動時,只需更改該面板的bgcolor即可。由於JLabel是透明的,您將看到更改。

至於代碼嘗試添加這樣的事情你statechange方法內部

panel.setBackground(new Color(int,int,int));//ints could be slider.getValue();