Swing, wymyslenie pewnego zdarzenia

0

weźmy, że cos to w Swingu, mam 3 pola tekstowe i che zrobic taka funkcjonalnosc:

  • 3 pola tekstowe, czynnik, czynnik, iloczyn
  • chce by po podaniu dowolnych dwoch wartosci w polach tekstowych, to jedno pozostale zostalo prawidlowo wyliczone

poczatkowo myslalem o dodaniu przycisku i w actionlistenerze kilku duzych ifów, jednak to by bylo dosc brzydkie...

da sie zrobic, aby to automatycznie sie podliczalo bez przycisku ?

z gody dzieki

0

Oczywiście, że da się to zrobić np. jest takie zdarzenie FocusListener - jeśli użytkownik opuszcza pole tekstowe z czynnikiem_1 to sprawdzana jest wartość czynnika_2 jeśli jest różna od zera to można wykonać działanie mnożenia i zapisanie wyniku w trzecim polu tekstowym. To samo przy opuszczeniu edycji pola z czynnikiem_2 sprawdzana jest wartość czynnika_1 jeśli jest różna od zera to .... .

0

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

0

po podaniu dowolnych dwoch wartosci w polach tekstowych

Jak chcesz rozpoznawać, że użytkownik już podał dwie wartości?

  • przeniósł fokus myszą gdzie indziej,
  • wpisał jedną liczbę, drugą liczbę i nacisnął Enter,
  • wpisał jedną liczbę, drugą liczbę i przez 3 sekundy niczego nie nacisnął,
    ....

1 użytkowników online, w tym zalogowanych: 0, gości: 1