2012-12-22 102 views
0

我正在Java中实现一个简单的水平JSlider。没有刻度线或任何类似的东西。可能和人类想象的一样简单。JSlider旋钮不更新(基本Java)

当我尝试“移动”的JSlider的通过鼠标拖动左右,其数值确实更新(我成立了一个system.out打印语句报告滑块的变化值,它们看起来不错) 。

但是,滑块旋钮本身不动。它只是停留在初始化期间开始的地方。在这方面有没有某种“每个JSlider应该有的”样板代码?

我一直在玩“ChangeListener”的东西,但我一直在死路一条。

+1

您可以发布您用来初始化JSlider的代码吗? –

回答

2

看起来工作得很好,我,请发表SSCCE显示具体的问题:

enter image description here

import java.awt.BorderLayout; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JSlider; 
import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 
import javax.swing.UIManager.LookAndFeelInfo; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

public class SwingSliderExample extends JPanel { 

    public SwingSliderExample() { 

     super(true); 
     this.setLayout(new BorderLayout()); 
     final JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 50, 25); 

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

     // We'll just use the standard numeric labels for now... 
     slider.setLabelTable(slider.createStandardLabels(10)); 

     slider.addChangeListener(new ChangeListener() { 
      @Override 
      public void stateChanged(ChangeEvent ce) { 
       if (!slider.getValueIsAdjusting()) {//no adjustments are taking place thus we know the value is final 
        System.out.println(slider.getValue()); 
       } 
      } 
     }); 

     add(slider, BorderLayout.CENTER); 
    } 

    public static void main(String s[]) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { 
         if ("Nimbus".equals(info.getName())) { 
          UIManager.setLookAndFeel(info.getClassName()); 
          break; 
         } 
        } 
       } catch (Exception e) { 
        // If Nimbus is not available, you can set the GUI to another look and feel. 
       } 
       JFrame frame = new JFrame("Slider Example"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new SwingSliderExample()); 
       frame.pack(); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 

参考: