tim*_*hew 7 java swing propertychanged propertychangesupport propertychangelistener
我想听一下JSpinner的SpinnerNumberModel值的变化.
我创建了一个PropertyChangeSupport并将模型放入其中.
我需要propertyChangeListener,因为它显示了属性的旧值和新值.
该代码段不起作用:propertyChange当我单击JSpinner时,该方法不会输出任何内容.
一个简单的ChangeListener只提供新值,但我还需要旧值,我怎样才能得到它?
package de.unikassel.jung;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
public class PropertyChangeTest implements PropertyChangeListener {
public static void main(String[] args) {
new PropertyChangeTest();
}
public PropertyChangeTest() {
JFrame frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
int value = 1;
int min = 0;
int max = 10;
int step = 1;
SpinnerNumberModel spinnerModel = new SpinnerNumberModel(value, min, max, step);
PropertyChangeSupport pcs = new PropertyChangeSupport(spinnerModel);
pcs.addPropertyChangeListener("value", this);
JSpinner spinner = new JSpinner(spinnerModel);
frame.getContentPane().add(spinner);
frame.setVisible(true);
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
System.out.println(evt);
System.out.println(evt.getSource());
}
}
Run Code Online (Sandbox Code Playgroud)
而不是听模型,听取编辑的意见JFormattedTextField,如下所示.
JSpinner spinner = new JSpinner(new SpinnerNumberModel(1, 0, 10, 1));
JSpinner.DefaultEditor editor = (JSpinner.DefaultEditor) spinner.getEditor();
editor.getTextField().addPropertyChangeListener("value", this);
Run Code Online (Sandbox Code Playgroud)
星期一早上...经典时间没有抵制几条评论:-)
@timaschew
@气垫船
@trashgod
哈哈 - 你已经猜到我不喜欢解决方案:它打破了封装,因为它依赖于实现细节,所以不要除了完全控制JSpinner创建并且绝对确定它的编辑器永远不会改变
| 归档时间: |
|
| 查看次数: |
2612 次 |
| 最近记录: |