我正在尝试创建一个自定义JSpinner,代表一系列强大的数字2.喜欢,1-2-4-8-16等等。我必须通过扩展AbstractSpinnerModel并更改其实现的方法(getNextValue等)来做到这一点。问题是,我的自定义JSpinner上的箭头键不起作用。单击其中一个时没有任何变化。我需要显示当前值的上一个和下一个值。 (先前值= 4当前值= 8下一个值= 16)。
这是我的代码:
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;
}
}
}
任何帮助将不胜感激。
答案 0 :(得分: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;
}
});
100%