2016-04-05 47 views
1

我試圖使JSlider實時更新JLabel,但它只是出現錯誤。這裏是我的代碼到目前爲止:使用JSlider實時更新JLabel

slider.addChangeListener(new ChangeListener() { 
    public void stateChanged() { 
     label.setText(String.valueOf(slider.getValue())); 
    } 
}); 

任何人都可以看到我哪裏出了錯? 謝謝,

+0

'「?任何人都可以看到我已經錯了」「 - 似乎有什麼不對您發佈的代碼,提示錯誤不在於此。如果您仍然需要幫助,請通過創建併發布[mcve]來改善問題。我們不想看到你的整個程序,而是你應該將你的代碼壓縮到仍然編譯的最小位,沒有額外的代碼與你的問題無關,但仍然表明你的問題。通過簡單地嘗試隔離並暴露錯誤,您可能很好地解決了這個問題。 –

+0

此外,發佈您可能遇到的任何和所有錯誤消息。 –

回答

1

我錯了,你的代碼中有一個非常基本的錯誤:你的stateChanged方法是錯誤的,因爲它需要一個ChangeEvent參數。更改

public void stateChanged() { 

public void stateChanged(ChangeEvent e) { 

的編譯器錯誤消息應該告訴所有這一切給你,並在未來,你要批判地閱讀這些信息,因爲他們會爲你節省很多的悲傷如果你這樣做。

例如:

import java.awt.BorderLayout; 
import javax.swing.*; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

public class SliderFoo extends JPanel { 
    private JSlider slider = new JSlider(0, 100, 50); 
    private JLabel label = new JLabel(" ", SwingConstants.CENTER); 

    public SliderFoo() { 
     slider.addChangeListener(new ChangeListener() { 
      @Override 
      public void stateChanged(ChangeEvent e) { 
       label.setText(String.valueOf(slider.getValue())); 
      } 
     }); 

     slider.setMajorTickSpacing(20); 
     slider.setMinorTickSpacing(5); 
     slider.setPaintTicks(true); 
     slider.setPaintLabels(true); 

     JPanel topPanel = new JPanel(); 
     topPanel.add(new JLabel("Slider Value:")); 
     topPanel.add(label); 

     setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
     setLayout(new BorderLayout(5, 5)); 
     add(topPanel, BorderLayout.PAGE_START); 
     add(slider); 
    } 

    private static void createAndShowGui() { 
     SliderFoo mainPanel = new SliderFoo(); 

     JFrame frame = new JFrame("SliderFoo"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> { 
      createAndShowGui(); 
     }); 
    } 
} 
+0

是的,它現在的作品!謝謝! – Tia