SpinnerNumberModel
을 GUI
으로 사용하여 JSpinner
을 구현하고 싶습니다. value, min, max, step
의 값은 이후에 ini-file 에서 읽어들이므로 GUI
이 빌드되면 SpinnerNumberModel
클래스에서 Setters
으로 변경해야합니다. 값은 파일에서 String
으로 읽은 다음 double
으로 구문 분석됩니다. 내가 obviosly JSpinner
하고 모두 SpinnerNumberModel
을 인스턴스화 후에 다시 설정할 수 있습니다, 전송 매개 변수로 Number
구현 된 Setter를 사용하여 SpinnerNumberModel의 최대 및 최소를 올바르게 변경하는 방법
public class InputSpinner implements ChangeListener {
JSpinner component;
SpinnerNumberModel model;
//empty constructor
public InputSpinner() {
model = new SpinnerNumberModel();
component = new JSpinner(model);
JComponent field = ((JSpinner.DefaultEditor) component.getEditor());
Dimension prefSize = field.getPreferredSize();
prefSize = new Dimension(50, prefSize.height);
field.setPreferredSize(prefSize);
component.addChangeListener(this);
}
//constructor with name
public InputSpinner(String name) {
model = new SpinnerNumberModel();
component = new JSpinner(model);
component.setName(name);
JComponent field = ((JSpinner.DefaultEditor) component.getEditor());
Dimension prefSize = field.getPreferredSize();
prefSize = new Dimension(50, prefSize.height);
field.setPreferredSize(prefSize);
component.addChangeListener(this);
}
//basic properties for all possible components
public void setName(String componentName) {
component.setName(componentName);
}
public void setToolTipText(String tooltip) {
component.setToolTipText(tooltip);
}
public void setValue (Number value) {
model.setValue(value);
}
public void setMaximum (Number max) {
model.setMaximum((Comparable<Double>)max);
}
public void setMinimum (Number min) {
model.setMinimum((Comparable<Double>)min);
}
public void setStepSize (Number step) {
model.setStepSize(step);
}
//getter for item
public JComponent getComponent() {
return this.component;
}
}
StepSize
에 대한 Setters
및 Value
로 한 :
JSpinner
및 SpinnerNumberModel
는 클래스 InputSpinner
에서 구현된다 그렇게 작동합니다.
및 max
의 경우 Setters
은 Comparable
을 요구합니다. double 값을 Comparable
(원시 형식) 또는 Comparable<Double>
으로 구문 분석하면 예외가 발생하지 않으며 JSpinner
이 더 이상 제대로 작동하지 않습니다. (에디터와 함께 제공되는 2 개의 버튼을 사용해서도 초기 값을 변경할 수 없습니다).
내 GUI에 JSpinner
을 추가 한 다음 값이 같은 그것을 변경 :
public class main {
public static void main(String[] args) {
JFrame frame = new JFrame("frame");
InputSpinner spinner = new InputSpinner("spinner");
frame.add(spinner.getComponent());
spinner.setValue(some double value I got from ini-file); //works properly
spinner.setStepSize(some double value I got from ini-file); //works properly
spinner.setMinimum(some double value I got from ini-file); //causes problems
spinner.setMaximum(some double value I got from ini-file); //causes problems
frame.pack();
frame.setVisible(true);
return;
}
}
내가 제대로 값을 설정 할 방법 각각 내가 어떻게 처리해야에게 Comparable
에 대한 수요?
잘 작동 당신의 set-methods에서'double'을 사용하십시오. 어떤 주조 나 전환도 필요 없습니다. 그것은 SpinnerNumberModel 메소드에 대한 호출을 만족시키기 위해 컴파일러에 의해 autoboxed 될 것입니다. – VGR