我想實現一個JSpinner
,其中SpinnerNumberModel
到GUI
。對於value, min, max, step
的值是從後GUI
被建成了ini文件讀,所以我需要從SpinnerNumberModel
類與Setters
改變它們。從文件中讀取值爲String
,然後解析爲double
。如何用適用的Setters正確更改SpinnerNumberModel的最大值和最小值
的JSpinner
和SpinnerNumberModel
一類InputSpinner
實現:
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;
}
}
由於Setters
爲StepSize
和Value
已經Number
作爲傳輸參數,我可以實例化兩個SpinnerNumberModel
後,將它們與JSpinner
並obviosly這樣工作。
Setters
對於min
和max
否則要求類型Comparable
。 只需將雙精度值解析爲Comparable
(原始類型)或Comparable<Double>
不會導致異常,但也會導致JSpinner
無法正常工作。 (初始值不能通過編輯或使用編輯器附帶的2個按鈕來改變)。
當我添加一個JSpinner
我的GUI,然後改變我不喜歡這樣的價值觀:
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
?
在我看來,只需更換數wi在你的設置方法中使用'double'。無需任何鑄造或轉換;它將被編譯器自動執行以滿足對SpinnerNumberModel方法的調用。 – VGR