Swing, wymyslenie pewnego zdarzenia

Odpowiedz Nowy wątek
2011-07-09 21:11
kortez
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

Pozostało 580 znaków

2011-07-09 21:53
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 .... .

edytowany 1x, ostatnio: Piort, 2011-07-09 21:55
To jest niewystarczające, użytkownik może wypełnić pola czynnik_1 i czynnik_2 i zostawić fokus w ostatnio wypełnionym. - bogdans 2011-07-11 08:45

Pozostało 580 znaków

2011-07-10 10:09
dziwny_człowiek
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

Nietypowo rozumiesz zwrot "bardzo prosty". - bogdans 2011-07-11 08:40

Pozostało 580 znaków

2011-07-11 08:49
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ął,
    ....

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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