2014-12-28 4 views
4

나는 힘의 수의 순서를 나타내는 사용자 지정 JSpinner를 만들려고합니다. 2, 1-2-4-8-16처럼. AbstractSpinnerModel을 확장하고 구현 된 메소드 (getNextValue 등)를 변경하면됩니다. 문제는 내 사용자 정의 JSpinner의 화살표 키가 작동하지 않는다는 것입니다. 둘 중 하나를 클릭해도 아무 것도 바뀌지 않습니다. 나는 현재 값의 이전 값과 다음 값을 보여줄 필요가있다. (이전 값 = 4 현재 값 = 8 다음 값 = 16). 어떤 도움을 이해할 수있을 것이다사용자 지정 Spinner 모델 만들기

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

public class Hw5SpinnerModel extends JFrame { 

public static void main(String[] args) { 

    Hw5SpinnerModel frame = new Hw5SpinnerModel(); 

} 

public Hw5SpinnerModel() { 

    setTitle("Hw5SpinnerModel"); 
    setSize(350, 300); 
    setLocationRelativeTo(null); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    final JSpinner jspn = new JSpinner(new CustomSpinnerModel()); 

    final JLabel jlbl = new JLabel(""); 

    add(jspn, BorderLayout.NORTH); 
    add(jlbl, BorderLayout.CENTER); 

    jspn.addChangeListener(new ChangeListener() { 

     @Override 
     public void stateChanged(ChangeEvent e) { 

      jlbl.setText(jspn.getPreviousValue() + jspn.getValue() + jspn.getNextValue()); 

     } 

    }); 

    //jlbl.setText(jspn.getNextValue() + ""); 

    setVisible(true); 

} 

public class CustomSpinnerModel extends AbstractSpinnerModel { 

    Integer i = 1; 

    @Override 
    public Object getValue() { 
     return i; 
    } 

    @Override 
    public void setValue(Object value) { 
     i = (Integer) value; 
    } 

    @Override 
    public Object getNextValue() { 
     return 2 * i; 
    } 

    @Override 
    public Object getPreviousValue() { 
     return i/2; 
    } 

} 

} 

:

여기 내 코드입니다.

답변

3
jSpinner1.setModel(new SpinnerNumberModel(1, null, null, 1) { 
     @Override 
     public Object getNextValue() {     
      Object nextValue = super.getValue(); 
      int x = Integer.valueOf(nextValue.toString())*2; 
      //Object o = x; 
      return x; 
     } 
    }); 

그것은 마법처럼 작동

+1

예, 감사합니다 100 %를 사용할 수 있습니다. – HalilM