如何根据另一个JSpinner的值更改SpinnerNumberModel?

时间:2016-10-06 13:04:50

标签: java swing max toolbar jspinner

我正在尝试在我的表单中创建一个工具栏,其中包含一些JSpinner,可以更改矩形的宽度和高度。

在此工具栏中,我有另一个JSpinner,其最大值基于宽度和高度JSpinners的当前值

我尝试修改SpinnerNumberModel事件中JSpinner的{​​{1}},但此解决方案不起作用。

有人知道怎么做吗?

创建宽度和高度stateChanged()

JSpinners

根据先例的值创建其他 //Creo il modello per i JSpinners widthModel = new SpinnerNumberModel((double)STD_DIMENSION, 1, 999, 1); heightModel = new SpinnerNumberModel((double)STD_DIMENSION, 1, 999, 1); //Creo pannello per widthSpinner widthSpinner = new JSpinner(widthModel); widthSpinner.addChangeListener(this); widthPanel = new JPanel(); widthPanel.setLayout(new FlowLayout()); widthPanel.add(new JLabel("Larghezza: ")); widthPanel.add(widthSpinner); //Creo pannello per heightSpinner heightSpinner = new JSpinner(heightModel); heightSpinner.addChangeListener(this); heightPanel = new JPanel(); heightPanel.setLayout(new FlowLayout()); heightPanel.add(new JLabel("Altezza: ")); heightPanel.add(heightSpinner);

JSpinner

//Creo lightModel e sunSpinner lightModel = new SpinnerNumberModel(canvas.getLightMax()/2, 0, canvas.getLightMax(), 1); sunSpinner = new JSpinner(lightModel); sunSpinner.setEnabled(false); sunSpinner.addChangeListener(this); 事件:

stateChanged()

@Override public void stateChanged(ChangeEvent e) { if (e.getSource().equals(widthSpinner)) { canvas.setRealWidth((double)widthSpinner.getValue()); lightModel = new SpinnerNumberModel(canvas.getLightMax()/2, 0, canvas.getLightMax(), 1); sunSpinner.setModel(lightModel); } if (e.getSource().equals(heightSpinner)) { canvas.setRealHeight((double)heightSpinner.getValue()); lightModel = new SpinnerNumberModel(canvas.getLightMax()/2, 0, canvas.getLightMax(), 1); sunSpinner.setModel(lightModel); } } 是一种根据某些getLightMax()的激活返回维度的方法:

JRadioButtons

我希望我发布所有必要的代码,如果不是只是问。

解决:

我忘了初始化 public double getLightMax() { if (horizontalBool) { return realHeight; } else { return realWidth; } } 变量,当您按下其中一个horizontalBool时,我也没有在actionPerformed()事件中调用模型更改。

感谢所有人。

0 个答案:

没有答案