2012-12-03 3 views
1

JSlider에 changelistener를 구현하려고합니다. 나는 두 가지 방법을 시도해 보았다. 주석 처리 된 섹션이 첫 번째 시도입니다. 지금 구현 된 것이 내 용도에 더 적합 할 것입니다. 사람이 잘못된 것입니다 무엇을 가리킬 수 있습니다JSlider changelistener가 작동하지 않습니다.

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

관련이없는이 : 지금 * 수동 크기/위치하지 않는다 *. 대신에 적절한 LayoutManager를 사용하십시오. – kleopatra

답변

3

ChangeListener이 첫번째 접근 방식에서 작동하지 않는 이유는, 당신은 리스너를 등록 할 때 리스너 참조 sizeActionnull 것입니다.

slider.addChangeListener(sizeAction); 

이것은 예외를 발생시키지 않지만 인스턴스가 생성 될 때 리스너를 등록하지 않습니다. 다음에이 행을 으로 간단하게 지정하면 사용자가 청취자를 정의하고 작업을 시작합니다. 당신이 당신의 다른 ChangeListener 구현을 사용하고자하는 경우 대신 다음을 사용할 수 있습니다

slider.addChangeListener(this);