jTextField - wyświetlanie tylko liczb od 0 do 9

0

witam,
chce abym w jTextFildIloscTowaru mógł wprowadzić tylko liczy od 0 do 9 i nie za bardzo wiem jak czy ktos moze mi pomoc? ponizej wycinek kodu. obecnie oczywiście zwraca wyjątek ale jak i gdzie zrobic np drugi co tylko to obsłuzy(liczby od 0-9)? a ten co jest try catch niech zostanie do innych wyjatkow;)

private void jButtonDodajActionPerformed(java.awt.event.ActionEvent evt) {                                             
        if(isEdit == false){
            if(jTextFieldNazwaTowaru.getText().equals("") ||
               jTextFieldNrZamowienia.getText().equals("")||
               jTextFieldIloscTowaru.getText().equals("")||
              ((String)jComboBoxWybierzKlienta.getSelectedItem().toString()).equals("")){
                    JOptionPane.showMessageDialog(rootPane, "Wypełnij wszystkie pola!", "Wypełnij pola!", WIDTH);
            }else{
                try {
                     ListObject usrList = (ListObject)XmlManagement.read ("Zamowienie.xml");
                     ArrayList<Object> a = (ArrayList<Object>) usrList.getList();
                     
                    zamowienie = new Zamowienie(
                             (String)jComboBoxWybierzKlienta.getSelectedItem().toString(),
                             Integer.parseInt(jTextFieldNrZamowienia.getText()),
                             Integer.parseInt(jTextFieldIloscTowaru.getText()),
                             jTextFieldNazwaTowaru.getText(),
                             (Date)jSpinner1.getValue());

                    a.add(zamowienie);
                    ListObject zam = new ListObject();
                    zam.setList(a);
                    XmlManagement.write(zam, "Zamowienie.xml");

                    JOptionPane.showMessageDialog(rootPane, "Zamówienie zostało dodane do bazy danych","Zamówienie dodano!",WIDTH);

                    this.dispose();
                }
                catch (Exception ex) {
                    JOptionPane.showMessageDialog(null,ex.getMessage());
                }
            }
        }
0
} catch (NumberFormatException ex) {
    // obsługa...
} catch (Exception ex) {
    JOptionPane.showMessageDialog(null,ex.getMessage());
}

Proponowałbym jednak użycie innej kontrolki, jakiś Spinner czy FormattedTextField.

0

dzieki działa o to mi chodziło. tylko teraz pytanie czy np do tego: jTextFieldNazwaTowaru.getText() jest tez cos podobnego? oczywiscie to pole jest do wprowadzania String i chce tak samo jakis wyjatek aby mozna było tylko Stringi wprowadzać.

iooi napisał(a)

Proponowałbym jednak użycie innej kontrolki, jakiś Spinner czy FormattedTextField.

Znalazłem w googlach taka funkcje, mozna by było tez ja zastosować ale tez nie zabardzo wiem jak. mogłbys mnie troche chociaz naprowadzic?

    public boolean isParsableToInt(String i){
        try{
            Integer.parseInt(i);
            return true;
        }
        catch(NumberFormatException nfe){
            return false;
        }
    }
0

Funkcja ta działa dokładnie tak samo jak to, co masz w jButtonDodajActionPerformed.
Użyj kontrolki JSpinner zamiast zwykłego JTextField - ta automatycznie będzie poprawiała wejście na tylko liczbowe, posiada też metodę getValue(), która zwraca obiekt typu zależnego od implementacji SpinnerModel - domyślnie jest to SpinnerNumberModel (można ustawić w konstruktorze JSpinnera, ale najwyraźniej taki jest tobie potrzebny) i w tym przypadku zwraca obiekt typu Number (rzeczywistym typem jest Integer).
Wtedy wystarczy, że napiszesz coś takiego:

// ...
String klient = jComboBoxWybierzKlienta.getSelectedItem().toString();
Integer nrZamowienia = (Integer) jSpinnerNrZamowienia.getValue();
Integer iloscTowaru = (Integer) jSpinnerIloscTowaru.getValue();
String nazwaTowaru = jTextFieldNazwaTowaru.getText();
Date data = (Date) jSpinner1.getValue();
zamowienie = new Zamowienie(klient, nrZamowienia, iloscTowaru, nazwaTowaru, data);
// ...

bez żadnego przechwytywania wyjątków.
Radziłbym też trochę ogarnąć kod - no chyba, że nikt go nie będzie oglądał, a tobie to nie przeszkadza ;d

0

dobra dzieki wiem o co kaman

iooi napisał(a)

Radziłbym też trochę ogarnąć kod - no chyba, że nikt go nie będzie oglądał, a tobie to nie przeszkadza ;d

Generalnie to kodu nikt nie bedzie ogladał ale chciałbym aby wygladał profesionalnie. Mozesz bardziej sprecyzowac co jest nie tak. Czy moze chodzi o jakas dokumentację?

0

Generalnie brak tu stosowania niektórych konwencji i kilka dziwactw, które zaciemniają kod:

jTextFieldNazwaTowaru.getText().equals("")
// Istnieje przecież metoda:
jTextFieldNazwaTowaru.getText().isEmpty()
if (isEdit == false) {
    // blok false...
} else {
    // blok true...
}
// Można przecież napisać (co jest IMO bardziej sensowne - najpierw powinna być sprawdzana prawdziwość wyrażenia):
if (isEdit) {
    // blok true...
} else {
    // blok false...
}

Nazwy zmiennych niedużo też mówią o sobie: a, zam.
Nazwy zmiennych kontrolek Swing powinny być raczej sufiksowane ich typem (jeśli już używać języka polskiego):
nazwaTowaruTextFieldzamiastjTextFieldNazwaTowaru
I kilka innych drobiazgów, jak zbyt długie instrukcje, które można rozbić na kilka mniejszych i czytelniejszych (co pozwoliłem sobie zrobić w poprzednim poście). To na początek się przyda:
http://java.sun.com/docs/codeconv/CodeConventions.pdf
http://geosoft.no/development/javastyle.html
Konwencje w niektórych przypadkach się nie zgadzają, więc najlepiej stosować tę Sunowską.
Metoda jButtonDodajActionPerformed też trochę bez sensu (tak to chyba generują wszelkie Swing Buildery), można to wszystko zawrzeć w samym ActionListenerze (actionPerformed).
Dokumentacja oczywiście też nie zaszkodzi.

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