PDA

View Full Version : تاثیر oldValue در نتیجه کار bean



trustmiracle
دوشنبه 19 بهمن 1388, 11:00 صبح
سلام
من یک بین نوشتم که سه تا تکست فیلد داره. دو تا اول برای گرفتن عدد و سومی هم برای نشان دادن جمعشون. هر وقت که تکست اول تغییر کنه تکست سوم هم تغییر می کنه.
یک متغیر به نام oldValue هم دارم که به مقدار قدیمی تکست 1 اشاره می کنه توی firePropertyChange و fireVetoableChange ازش استفاده می کنم.
توی متد vetoableChange هم گفتم اگر مقدار تکست 1 خالی بود آنگاه:

throw new PropertyVetoException("", evt);


حالا اتفاقی که می افته اینه که اگر مقدار oldvalue برابر تهی باشه برنامه درست کار می کنه ولی اگر تهی نباشه هر وقت مقدار تکست 1 برابر تهی بشه خطا میده.:متفکر:
این هم کد:



public class main3 extends JPanel implements Serializable,VetoableChangeListener,PropertyChange Listener{
private JTextField txt1,txt2,txt3;
private JLabel lbl1,lbl2,lbl3;
private String oldValue="";
private PropertyChangeSupport pcs=new PropertyChangeSupport(this);
private VetoableChangeSupport vcs=new VetoableChangeSupport(this);
public main3() {
addPropertyChangeListener(this);
addVetoableChangeListener(this);
this.setLayout(new GridLayout(3, 2));
txt1=new JTextField("0");
txt2=new JTextField("0");
txt3=new JTextField("0");
lbl1=new JLabel("Value 1 : ");
lbl2=new JLabel("Value 2 : ");
lbl3=new JLabel("Sum : ");
txt1.addKeyListener(new KeyListener() {

public void keyTyped(KeyEvent e) {
}

public void keyPressed(KeyEvent e) {
}

public void keyReleased(KeyEvent e) {
try {
vcs.fireVetoableChange("txt1", oldValue, txt1.getText());
} catch (PropertyVetoException ex) {
System.err.println("Error : Invalid Value");
}
pcs.firePropertyChange("txt1", oldValue, txt1.getText());
//oldValue=txt1.getText();
}
});
this.add(lbl1);
this.add(txt1);
this.add(lbl2);
this.add(txt2);
this.add(lbl3);
this.add(txt3);
}

public void addPropertyChangeListener(PropertyChangeListener l){
pcs.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListene r l){
pcs.removePropertyChangeListener(l);
}
public void addVetoableChangeListener(VetoableChangeListener l){
vcs.addVetoableChangeListener(l);
}
public void removeVetoableChanegListener(VetoableChangeListene r l){
vcs.removeVetoableChangeListener(l);
}

public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException {
if (String.valueOf(evt.getNewValue()).isEmpty())
throw new PropertyVetoException("", evt);
}

public void propertyChange(PropertyChangeEvent evt) {
int a=Integer.parseInt(evt.getNewValue().toString());
int b=Integer.parseInt(txt2.getText());
txt3.setText(String.valueOf(a+b));
}
}



ممنون.:قلب: