2012-06-22 53 views
1

我在我的程序中使用了JSlider,并且已经为此实现了一个ChangeListener。没有从JSlider获得价值

public void stateChanged(ChangeEvent e) 
    { 
     JSlider source=(JSlider) e.getSource(); 
     frame_value.setText(Integer.toString(source.getValue())); 

     //Condition to change the frame_no only when user has stopped moving the slider 
     if (!source.getValueIsAdjusting()) 
     { 
      frame_no=(int) source.getValue()-1; 
      if(frame_no<0) 
       frame_no=0; 
     } 
     .... 
} 

发生什么事是,无论何时调用ChangeListener,程序都会跳过if块,然后转到代码。我不明白为什么会发生这种情况。我无法从JSlider获得正确的值。请帮忙!!

PS:我不知道这是否是原因,但是最近我已经设置了JSlider的UI来放置点击它的刻度。我不知道这是否对它负责。下面是代码:

slider.setUI(new MetalSliderUI() { 
       protected void scrollDueToClickInTrack(int direction) { 
        int value = HEVC_Analyzer.slider.getValue(); 

        value = this.valueForXPosition(HEVC_Analyzer.slider.getMousePosition().x); 
        HEVC_Analyzer.slider.setValue(value); 
       } 
      }); 
+2

为了更好地帮助您,请发布[SSCCE](http://sscce.org/)。 –

+0

@AndrewThompson我只在这里发布了问题部分..问题是这部分代码没有执行.. –

+3

*“我只在这里发布了问题部分。”*在你知道答案之前,你怎么知道**代码是问题的原因**?我不打算仔细研究不可编译的代码片段,试图确定在这里是否可能是这种情况,但是你可能会很幸运。否则**发布SSCCE ** –

回答

5

必须在你的代码的一些错误,因为它在这个例子做工精细:

import javax.swing.*; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 

public class SliderChangeEffect extends JFrame 
{ 
    private JSlider slider; 
    private int count = 0; 
    private ChangeListener changeListener = new ChangeListener() 
    { 
     public void stateChanged(ChangeEvent ce) 
     { 
      JSlider slider = (JSlider) ce.getSource(); 
      if (!slider.getValueIsAdjusting()) 
       System.out.println(slider.getValue()); 
     } 
    }; 

    private void createAndDisplayGUI() 
    { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationByPlatform(true); 

     JPanel contentPane = new JPanel(); 
     contentPane.setOpaque(true); 

     slider = new JSlider(0, 10, 5); 
     slider.setMajorTickSpacing(2); 
     slider.setMinorTickSpacing(1); 
     slider.addChangeListener(changeListener); 

     contentPane.add(slider); 

     getContentPane().add(contentPane); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String... args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new SliderChangeEffect().createAndDisplayGUI(); 
      } 
     }); 
    } 
} 
+0

+1这就是为什么要求SSCCE – mKorbel

+1

是的,我也在等待SSCCE,但因为我没有一个,所以试过我的手,它正在工作,所以粘贴我的代码在这里:-) –

0

只需使用将String.valueOf()和event.MouseReleased() 。

private void jSlider1MouseReleased(java.awt.event.MouseEvent evt) {          
    // TODO add your handling code here: 
    try { 

     String valueOf = String.valueOf(jSlider1.getValue()); 
     jLabel1.setText(valueOf); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

}