ErrorMessage für JTextField

hesk

Erfahrenes Mitglied
Hallo!

Meine Frage bezieht sich hauptsächlich auf das Design. Wohin mit einer ErrorMessage.

Folgendes Bild - Ein JPanel mit folgendem Aufbau:

/--------------------------\
| -Label- -JTextField- |
| -Label- -JTextField- |
| |
| -Abort- -Save- |
\--------------------------/


Ein Dialog wo etwas eingegeben werden kann.
Mit dem klick auf den Save-Button wird die Eingabe überprüft.
Falls richtig gehts weiter, falls falsch soll der User informiert werden dass die Eingabe falsch ist.
Dies möchte ich aber nicht mit einem extra jdialog machen den der User dann wegklicken muss, sondern ich hätte gern etwas wie einen jtoolTip der als Error Dient.

Also man drückt auf den save-Button, wenn die Eingabe falsch ist, dann kommt über dem JTextField ein roter ToolTip der die ErrorMessage enthält, und so lange bleibt bis der User die Eingabe im Feld ändert.


Oder fällt jemanden eine bessere Lösung zur Error-Darstellung ein?
Das JPanel vergrößern damit man rechts neben dem JTextField ein Label hingeben kann finde ich auch nicht schön, da dann das JPanel am Anfang komisch aussehen würde.

Vielen Dank
 

hesk

Erfahrenes Mitglied
Eine Statusbar ist nur so breit wie das Fenster an sich. Und dies bietet dann nicht genügend Platz um alle Fehlermeldung auszugeben.
Mache ich die Statusbar so hoch damit sich alles ausgeht, ist wieder das Problem dass am Anfang der Bereich leer ist und es blöd aussieht.
 

Fabio Hellmann

Erfahrenes Mitglied
Du kannst die Statusbar so hoch machen, dass eine Zeile Text rein passt. Sollte der Text mehrere Zeilen haben, kann dieser - z.B. via Mouseover-effekt - im Tooltip angezeigt werden.
 

hesk

Erfahrenes Mitglied
Ich hab mich nun dazu entschieden mit Icons zu arbeiten.

Folgender Aufbau

Label(zb Datum: | Textfield(Eingabe) | Label(icon)

Das icon am schluss soll anzeigen ob die Eingabe korrekt ist oder nicht.

Wenn man aber ein Label mit nur einem Icon macht(ohne Text) dann pickt es ganz oben.

Gibt man aber text hinzu, ist es in der vertikal-Achse zentriert.

Wieso ist das so. Und wie kann man es ändern?


Edit: Kann es am Layout liegen?

Hier der Code vom Layout:

Java:
groupLayout.setHorizontalGroup(groupLayout.createSequentialGroup()
                                                  .addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                                                                       .addComponent(datum_Label)
                                                                       .addComponent(usPreis_Label)
                                                                       .addComponent(euroPreis_Label)
                                                                       .addComponent(bestellteMenge_Label))
                                                  .addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                                                                       .addComponent(datum_Input, inputFieldWidth,
                                                                                     inputFieldWidth, inputFieldWidth)
                                                                       .addComponent(usPreis_Input)
                                                                       .addComponent(euroPreis_Input)
                                                                       .addComponent(bestellteMenge_Input))
                                                  .addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
                                                                       .addComponent(datum_Error)
                                                                       .addComponent(usPreis_Error)
                                                                       .addComponent(euroPreis_Error)
                                                                       .addComponent(bestellteMenge_Error)
                                                  )
                   );

        groupLayout.setVerticalGroup(groupLayout.createSequentialGroup()
                                                .addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                                                                     .addComponent(datum_Label)
                                                                     .addComponent(datum_Input)
                                                                     .addComponent(datum_Error))
                                                .addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                                                                     .addComponent(usPreis_Label)
                                                                     .addComponent(usPreis_Input)
                                                                     .addComponent(usPreis_Error))
                                                .addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                                                                     .addComponent(euroPreis_Label)
                                                                     .addComponent(euroPreis_Input)
                                                                     .addComponent(euroPreis_Error))
                                                .addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                                                                     .addComponent(bestellteMenge_Label)
                                                                     .addComponent(bestellteMenge_Input)
                                                                     .addComponent(bestellteMenge_Error))
                   );

        groupLayout.linkSize(SwingConstants.HORIZONTAL,
                             datum_Label,
                             usPreis_Label,
                             euroPreis_Label,
                             bestellteMenge_Label);

        groupLayout.linkSize(SwingConstants.HORIZONTAL,
                             datum_Input,
                             usPreis_Input,
                             euroPreis_Input,
                             bestellteMenge_Input);
 

Anhänge

  • bild1.JPG
    bild1.JPG
    10,3 KB · Aufrufe: 29
  • bild2.JPG
    bild2.JPG
    10,6 KB · Aufrufe: 30
Zuletzt bearbeitet:

hesk

Erfahrenes Mitglied
Folgende Zeilen haben das erwünscht Ergebnis gebracht:

Java:
groupLayout.linkSize(SwingConstants.VERTICAL, datum_Label, datum_Input, datum_Error);
groupLayout.linkSize(SwingConstants.VERTICAL, usPreis_Label, usPreis_Input, usPreis_Error);
groupLayout.linkSize(SwingConstants.VERTICAL, euroPreis_Label, euroPreis_Input, euroPreis_Error);
groupLayout.linkSize(SwingConstants.VERTICAL, bestellteMenge_Label, bestellteMenge_Input, bestellteMenge_Error);