您的位置:首页 > Web前端 > JavaScript

JSpinner学习心得

2010-04-28 16:37 218 查看
在JDK里面,定义了三个与JSpinner相对应的model,分别是SpinnerDateModel,SpinnerListModel,SpinnerNumberModel,根据不同的需求,创建不同不得model,注意在JSpinner的构造方法中如果不传入相应的model,那么就会按照SpinnerNumberModel处理。SpinnerDateModel对应JSpinner生成的编辑器为DateEditor,SpinnerListModel对应JSpinner生成的编辑器为ListEditor,SpinnerNumberModel对应JSpinner生成的编辑器为NumberEditor,当然也可以自己定义一个model,但是这时候从JDK中就可以看出-----除了上述三种model,对于别的model,它都是按照DefaultEditor来处理,这样就来了一个麻烦,就是在DefaultEditor的构造方法中就定义这里面的组件是不可以编辑的,(本人愚钝,不知如何修改,但是我想肯定可以改成可以修改的,我继承过来 弄了半天也没好。)

对于设计UI来说,三种情况似乎是少了点,例如这种情况我想利用SpinnerNumberModel,但是有一点,就是在初始化的时候不要显示“0”,而是什么也不显示。这种情况下可以这样处理,就是给JSpinner加上一个编辑器(setEditor方法),我们可以让编辑器来显示,那么如何让JSpinner中的值改变的时候去通知编辑器哪?JDK里面当JSpinner会触发fireStateChanged,fireStateChanged恰好会触发监听事件,那么这样让编辑器实现ChangeListener接口,这样就会把问题迎刃而解。可以看下source:

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Test extends JPanel {
public Test(){
this.setPreferredSize(new Dimension(60,60));
SpinnerNumberModel model = new SpinnerNumberModel();
JSpinner spinner = new JSpinner(model);
spinner.setPreferredSize(new Dimension(50,20));
spinner.setEditor( new TextFile(spinner));
this.add(spinner, BorderLayout.CENTER);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel panel = new Test();
frame.add(panel);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
class TextFile extends JTextField implements ChangeListener{
public TextFile(JSpinner spinner1){
this.spinner = spinner1;
this.spinner.addChangeListener(this);
// this.setText(spinner1.getValue().toString());
}
JSpinner spinner;
public JSpinner getSpinner() {
return spinner;
}
public void setSpinner(JSpinner spinner) {
this.spinner = spinner;
}
public void stateChanged(ChangeEvent e) {
this.setText(this.spinner.getValue().toString());
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: