2012-12-03 6 views
1

J'essaye d'implémenter un changelistener sur un JSlider. J'ai essayé deux méthodes séparées ni l'un ni l'autre n'a fonctionné. La section commentée est la première tentative. Celui qui est mis en place maintenant serait probablement le mieux adapté à mes fins. Quelqu'un peut-il remarquer ce qui se passe mal avec ceci:Le changelistener JSlider ne fonctionne pas

public class MixWindow extends JFrame implements ChangeListener{ 

    private JPanel contentPane; 
    public static int uniA [] = new int [512]; 
    ChangeListener sizeAction; 
    int level = 0; 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        MixWindow frame = new MixWindow(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
     initUni(); 
    } 

    public MixWindow() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 800, 600); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 

     JSlider slider = new JSlider(0,255); 
     slider.setOrientation(SwingConstants.VERTICAL); 
     slider.setBounds(66, 275, 72, 140); 
     slider.setPaintTicks(true); 
     slider.setMajorTickSpacing(20); 
     slider.setValue(uniA[0]); 
     //slider.addChangeListener(sizeAction); 
     contentPane.add(slider); 


     final JLabel label = new JLabel(""); 
     label.setBounds(66, 262, 61, 16); 
     contentPane.add(label); 


     /*sizeAction=new ChangeListener() 
     { 
      public void stateChanged (ChangeEvent event) 
      { 
       System.out.println("This is getting silly"); 
       JSlider slider=(JSlider)event.getSource(); 

       level=slider.getValue(); 
       uniA[0] = level; 
       String temp = String.valueOf(level); 
       label.setText(temp); 



      } 
     };*/ 
    } 

    public static void initUni(){ 
     for(int i = 0; i < uniA.length; i++){ 
      uniA[i] = 0; 
      } 
    } 

    @Override 
    public void stateChanged(ChangeEvent arg0) { 
     // TODO Auto-generated method stub 
     System.out.println("Stuff has changed"); 
     Object source = arg0.getSource(); 
     System.out.println(arg0 + " has Changed"); 

    } 
} 
+1

sans rapport avec: ne pas faire le dimensionnement/positionnement manuel * * jamais. Au lieu de cela, utilisez un LayoutManager approprié – kleopatra

Répondre

3

La raison pour laquelle le ChangeListener ne fonctionne pas dans votre 1ère approche, est que votre référence auditeur sizeAction est null lorsque vous enregistrez l'auditeur. Bien que ceci ne lèvera pas une exception, il n'inscrira pas l'écouteur quand il est instancié. Il suffit de laisser cette ligne apparaître après vous définissez l'écouteur et il commencera à fonctionner. Si vous souhaitez utiliser votre autre ChangeListener mise en œuvre à la place, vous pouvez utiliser:

slider.addChangeListener(this);