Jest bardzo prosty sposób w NetBeans + BeansBinding.
Tworzysz sobie model z obsługą PropertyChangeListenera na wartości:
package net4.programmers;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
public class CalculatorModel {
private final static String RESULT_PROPERTY = "result";
private final static String MULTIPLIER_1_PROPERTY = "multiplier1";
private final static String MULTIPLIER_2_PROPERTY = "multiplier2";
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
private long result = 0;
private int multiplier1 = 0;
private int multiplier2 = 0;
public int getMultiplier1() {
return multiplier1;
}
public void setMultiplier1(int multiplier1) {
firePropertyChange(MULTIPLIER_1_PROPERTY, this.multiplier1, this.multiplier1 = multiplier1);
updateResults();
}
public int getMultiplier2() {
return multiplier2;
}
public void setMultiplier2(int multiplier2) {
firePropertyChange(MULTIPLIER_2_PROPERTY, this.multiplier2, this.multiplier2 = multiplier2);
updateResults();
}
private void updateResults() {
firePropertyChange(RESULT_PROPERTY, this.result, this.result = this.multiplier1 * this.multiplier2);
}
public long getResult() {
return result;
}
protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
this.propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(propertyName, listener);
}
}
Wyklikujesz sobie widok w NB, gdzie do pola z mnożnikami podpinasz wartości multiplier1 i multiplier2 w dostępie READ_WRITE, oraz podpinasz wynik jako READ.
Do mnożników użyj JSpinnera lub JFormattedTextField i binduj "value".
Simple:P