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());
}
}
}
对于设计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());
}
}
}
相关文章推荐
- 学习完html,css,js,jq之后做网页心得
- 每日学习心得:Js获取Checkboxlist所选值、instanceof 和typeof区别、为Array添加contains方法
- Hybrid App学习心得:cordova + ionic + angularjs
- 小白学习node.js的心得
- [学习心得] Node.js第一篇
- js学习心得之js的自定义事件-基于观察者模式的实现
- 每日学习心得:Js获取Checkboxlist所选值、instanceof 和typeof区别、为Array添加contains方法
- 转型学习心得_js笔记
- 每日学习心得:Js基本数据类型常用方法扩展
- Three.js的学习心得
- [Javascript 高级程序设计]学习心得记录11 js的BOM
- JS语言核心学习心得
- Node.js学习心得
- 分享一下学习css,js心得
- Nuxt.js学习心得
- [置顶] 关于对js插件fullpage学习的一些心得
- js学习心得2
- js装饰设计模式学习心得
- js 学习心得2
- js事件的学习心得