gpt4 book ai didi

java - 如何使用已实现的 Setters 正确更改 SpinnerNumberModel 的最大值和最小值

转载 作者:行者123 更新时间:2023-12-02 13:13:03 26 4
gpt4 key购买 nike

我想实现 JSpinnerSpinnerNumberModelGUIvalue, min, max, step 的值从 ini 文件GUI之后读取已构建,因此我需要使用 Setters 更改它们来自SpinnerNumberModel类(class)。这些值从文件中读取为 String ,然后解析为 double .

JSpinnerSpinnerNumberModel在类 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对于 StepSizeValueNumber作为传输参数,我可以在实例化 SpinnerNumberModel 后设置它们和 JSpinner显然它就是这样工作的。

Setters对于 minmax否则要求类型 Comparable 。只需将 double 值解析为 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的需求?

最佳答案

我不知道为什么你的 set 方法不适用于 double,但我找到了一种使用 double 作为当前、最小值、最大值和步长的方法。

如果您创建模型,则可以在构造函数中传递值,如下所示:

double current = 5.7;
double min = (double) 5.5;
double max = (double) 7.3;
double step = 0.1;
model = new SpinnerNumberModel(current, min, max, step);

使用哪个值并不重要,但如果您想进一步使用 double,它们似乎是 double,因为这样这段代码也可以工作:

JFrame frame = new JFrame("frame");
InputSpinner spinner = new InputSpinner("spinner");

frame.add(spinner.getComponent());

spinner.setValue(5.1);
spinner.setMinimum(1.0);
spinner.setMaximum(25.3);
spinner.setStepSize(2.5);

frame.pack();
frame.setVisible(true);

据我所知,您必须将步长设置为最后一个值,但现在它工作得很好

关于java - 如何使用已实现的 Setters 正确更改 SpinnerNumberModel 的最大值和最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43870878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com