JFormattedTextfield um Grafik erweitern

Status
Nicht offen für weitere Antworten.

Dönsen

Mitglied
Hallo Leute,

Irgendwas läuft bei mir falsch, nur leider verstehe ich nicht was. Es geht darum, dass ich ein JFormattedTextfield um eine Grafik erweitern möchte, die signalisiert, dass ein ungültiger Wert eingetragen wurde.Das Problem ist vermutlich, dass sich die Grafik zum Teil im Textfeld, zum Teil ausserhalb des Textfeldes befinden soll.

Aber seht selbst, so ist es gewünscht:


Wenn nun aber ein ungültiger Wert eingetragen wird, dann sieht das Textfeld leider so aus:



Man kann erkennen, dass das Kreuz zum Teil angezeigt wird, aber eben nur innerhalb des Textfeldes. Sobald ich das Fenster resize sieht es korrekt aus.

Ich hab es schon mit setOpaque(false) und ich weiß nicht was allem probiert, aber es will nicht.

So sieht meine paintComponent(Graphics g) aus:
Code:
@Override
protected void paintComponent(Graphics g) {
	super.paintComponent(g);
	g.setClip(null);
	Dimension d = getSize();
	setBorder(new LineBorder(Color.BLACK));
	if (isRequired()) {
		setBorder(new LineBorder(Color.BLUE));
		g.drawImage(IMG_ASTERISK_BLUE, -4, 0, this);
	}
	if (isFaulty()) {
		setBorder(new LineBorder(Color.RED));
		g.drawImage(IMG_ERROR, -4, getHeight() - 7, this);
	}
	setPreferredSize(d);
}

Wie gesagt, opaque ist momentan true.

Hat jmd. schonmal soetwas gemacht und kann mir einen hilfreichen Tipp geben? Vielen Dank!

Gruß, Christophe
 

Ebenius

Top Contributor
Komponenten dürfen niemals außerhalb ihrers Bereichs zeichnen. Macht man's doch, kommt es stets zu Problemen!

Was Du statt dessen machen könntest ist sowas:
Code:
final JFormattedTextField tf = new JFormattedTextField();
tf.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10), tf.getBorder());
(Code im Browser getippt, kann Fehler haben)

Und dann zeichnest Du eben nicht außerhalb der Komponente, sondern über den Border, der ja noch zu Deiner Komponente gehört.

Ebenius
 

Ebenius

Top Contributor
SirWayne hat gesagt.:
wenn es nach einem reszie korrekt aussieht...
dann versuch mal ein repaint nach einer falschen eingabe...

Hilft nix. Er zeichnet außerhalb der Komponente. Das macht man nicht, was Gründe hat.
 
G

Gast2

Gast
Ja würde ich auch nicht machen du könntest ein JPanel nehmen darauf deine Komonente setzen und links die insets höher stellen und darauf dann zeichnen... denke das könnte klappen
 

Ebenius

Top Contributor
SirWayne hat gesagt.:
besser find ich persönlich die eingabe nicht zuzulassen ...
Hängt davon ab, was man machen möchte. Was ist, wenn "leer" lassen nicht erlaubt ist. Dann will man bestimmt auch das Feld markieren können, um dem Nutzer zu sagen: Du hast hier was vergessen. Wie möchtest Du die leere Eingabe verbieten?
 

Dönsen

Mitglied
Hallo ihr beiden,

Vielen Dank für eure Anmerkungen. Die Idee mit dem Border hat wunderbar funktioniert!

Ebenius hat gesagt.:
Hängt davon ab, was man machen möchte. Was ist, wenn "leer" lassen nicht erlaubt ist. Dann will man bestimmt auch das Feld markieren können, um dem Nutzer zu sagen: Du hast hier was vergessen. Wie möchtest Du die leere Eingabe verbieten?
Genau um solche Sachen geht es. Man kann nicht alle Eingaben während der Eingabe prüfen. Was ist beispielsweise, wenn ein komplexer regulärer Ausdruck den inhalt des Feldes validiert? Dann müsste ich den Benutzer in dem Feld "festhalten", bis er das richtige Format erwischt hat. Das möchte ich aber nicht. Ich will dem Benutzer die Chance lassen bspw. die Hilfe aufzurufen. Einzig das Speichern der Daten wird ihm verweigert.

Einziger Nachteil ist , dass die Komponente jetzt ein wenig mehr Platz braucht. Aber das spar ich dann eben im Layout der Maske ein.

Gruß und DANKE nochmal, Christophe
 
G

Gast2

Gast
ok einleuchtend...
aber wie du gesgat hast dass mit dem layout könnte ein Problem sein wenn der Border jetzt so dick ist...
geht es nicht dass man die komponente in dem fall nur nach links vergrößert????...
 

Ebenius

Top Contributor
SirWayne hat gesagt.:
ok einleuchtend...
aber wie du gesgat hast dass mit dem layout könnte ein Problem sein wenn der Border jetzt so dick ist...
geht es nicht dass man die komponente in dem fall nur nach links vergrößert????...
Ich gehe davon aus, das hat Dönsen schon selbständig getan. :)

// EDIT: Abkürzung OP durch Dönsen ersetzt
 
G

Gast2

Gast
ah ok ;).. ja dachte es ist vielleicht irgendwie möglich nur die linke seite zu erweitern, wäre vielelciht gut mal zu wissen :p
 

Dönsen

Mitglied
Dann poste ich mal meine Lösung. Es funktioniert so. Möglicherweise habt ihr aber noch einer Rat, was man bedenken sollte/muss.

Zunächst statische Konstante:
Code:
private static final int OUTER_BORDER_SIZE = 2;

Dann die setBorder-Methode:
Code:
@Override
public void setBorder(Border border) {
	Border outerBorder = BorderFactory.createEmptyBorder(0, OUTER_BORDER_SIZE, OUTER_BORDER_SIZE, 0);
	super.setBorder(BorderFactory.createCompoundBorder(outerBorder, border));
}

Und schlussendlich die paintBorder-Methode (paintComponent ist nicht mehr nötig):
Code:
@Override
protected void paintBorder(Graphics g) {
	super.paintBorder(g);
	if (bgColor == null && getParent() != null) {
		bgColor = getParent().getBackground();
	}
	Graphics gc = g.create();

	// Hintergrund-Farbe des Elements setzen:
	gc.setColor(bgColor);
	gc.drawRect(0, 0, OUTER_BORDER_SIZE-1, getHeight());
	gc.drawRect(0, getHeight() - OUTER_BORDER_SIZE, getWidth(), OUTER_BORDER_SIZE-1);

	Dimension d = getSize();
	setBorder(new LineBorder(Color.BLACK));

	if (isRequired()) {
		setBorder(new LineBorder(Color.BLUE));
		gc.drawImage(IMG_ASTERISK_BLUE, 0, 0, this);
	}

	if (isFaulty()) {
		setBorder(new LineBorder(Color.RED));
		gc.drawImage(IMG_ERROR, -1, getHeight() - (IMG_ERROR.getHeight(this) - 1), this);
	}
	setPreferredSize(d);
	gc.dispose();
}

Ich hoffe das hilft jemandem. Gruß, Christophe
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F JFormattedTextField für kg und Währung AWT, Swing, JavaFX & SWT 6
S JFormattedTextField dezimal variabler Länge AWT, Swing, JavaFX & SWT 12
Ghostman1711 Java JFormattedTextfield MaskFormatter ohne Leerzeichen AWT, Swing, JavaFX & SWT 3
N Swing JFormattedTextField keine Werte nach Formatzuweisung AWT, Swing, JavaFX & SWT 0
M European Article Number (EAN) in JFormattedTextfield AWT, Swing, JavaFX & SWT 3
L JFormattedTextField AWT, Swing, JavaFX & SWT 3
B Swing JFormattedTextField AWT, Swing, JavaFX & SWT 4
Y JFormattedTextfield - Aktualisierung und Beschränkung AWT, Swing, JavaFX & SWT 4
V Swing Nullpointer Exception bei JFormattedTextField AWT, Swing, JavaFX & SWT 4
S Swing JFormattedTextField - bei nicht korrekter Eingabe Inhalt überschreiben AWT, Swing, JavaFX & SWT 5
S Swing JFormattedTextfield markiert nicht gesamten Inhalt AWT, Swing, JavaFX & SWT 4
C Swing Button in Textfeld (JFormattedTextField) AWT, Swing, JavaFX & SWT 7
A jformattedtextfield unsichtbar und wieder sichtbar machen AWT, Swing, JavaFX & SWT 13
C Swing JFormattedTextField + Eurobetrag AWT, Swing, JavaFX & SWT 2
E Problem mit MaskFormatter und JFormattedTextField AWT, Swing, JavaFX & SWT 3
A EventListener für JFormattedTextField AWT, Swing, JavaFX & SWT 6
B Swing Betrag mit Komma aus jformattedtextfield auslesen. AWT, Swing, JavaFX & SWT 2
E Swing JFormattedTextField Live Validierung AWT, Swing, JavaFX & SWT 4
C Swing Default Werte für JFormattedTextField und Eingaben zurücksetzen AWT, Swing, JavaFX & SWT 5
G JFormattedTextField und DefaultButton AWT, Swing, JavaFX & SWT 6
B Swing JFormattedTextField auf mehreren JPanels in einer JTabbedPane AWT, Swing, JavaFX & SWT 3
G JFormattedTextField values AWT, Swing, JavaFX & SWT 8
R JFormattedTextField AWT, Swing, JavaFX & SWT 8
D Eingabemaske im JFormattedTextField ändern AWT, Swing, JavaFX & SWT 3
N JFormattedTextField erst Verlassen, wenn Eingabe korrekt AWT, Swing, JavaFX & SWT 6
G JFormattedTextField lässt sich nicht mehr leeren AWT, Swing, JavaFX & SWT 4
N PropertyChangeListener an JFormattedTextField AWT, Swing, JavaFX & SWT 7
D Problem mit JFormattedTextField AWT, Swing, JavaFX & SWT 6
A Problem mit JFormattedTextField auslesen AWT, Swing, JavaFX & SWT 11
S JFormattedTextField und maximal 3 Stellen. AWT, Swing, JavaFX & SWT 11
M JFormattedTextField und Null-Werte AWT, Swing, JavaFX & SWT 4
E JformattedTextField, Dialog und weitere Kleinigkeiten . AWT, Swing, JavaFX & SWT 2
E Problem mit Validierende Eingabefeldern JFormattedTextField AWT, Swing, JavaFX & SWT 8
B JFormattedTextField mit DecimalFormat in ein Double AWT, Swing, JavaFX & SWT 11
C JFormattedTextField - nur bestimmte Zeichen zulassen AWT, Swing, JavaFX & SWT 3
H JFormattedTextField - Einen Preis eingeben lassen AWT, Swing, JavaFX & SWT 2
B Zeichen werden im JFormattedTextField überschrieben AWT, Swing, JavaFX & SWT 3
H JFormattedTextField AWT, Swing, JavaFX & SWT 4
W IP-Adresse mit JFormattedTextField AWT, Swing, JavaFX & SWT 5
F JFormattedTextField formatieren AWT, Swing, JavaFX & SWT 7
J [JFormattedTextField] Nur Zahlen eingebbar AWT, Swing, JavaFX & SWT 3
S [JFormattedTextField] Ja wie denn nun? AWT, Swing, JavaFX & SWT 2
G Datumseingabe mit JFormattedTextField AWT, Swing, JavaFX & SWT 4
B Wert bei JFormattedTextField automatisch aktualisieren AWT, Swing, JavaFX & SWT 2
H Frage zu JFormattedTextField AWT, Swing, JavaFX & SWT 2
G Problem mit JFormattedTextField AWT, Swing, JavaFX & SWT 3
M Datumseingabe in ein JFormattedTextfield AWT, Swing, JavaFX & SWT 2
F Problem mit JFormattedTextField AWT, Swing, JavaFX & SWT 4
A JFormattedTextField - vertical misalignment problems... AWT, Swing, JavaFX & SWT 12
I Libraries für AWT für andere Grafik-Frameworks tauglich machen AWT, Swing, JavaFX & SWT 6
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
M Umwandlung in den HSV-Farbraum lässt die Grafik pixelig werden AWT, Swing, JavaFX & SWT 8
S 2D-Grafik Winkelberechnungen auf 2D Grafik AWT, Swing, JavaFX & SWT 2
E Grafik karte erkennen AWT, Swing, JavaFX & SWT 3
S JavaFX Java Custom Node Grafik zurückgeben AWT, Swing, JavaFX & SWT 2
D Swing JCombobox Aktion löscht Grafik AWT, Swing, JavaFX & SWT 1
K Grafik in JFrame einpassen AWT, Swing, JavaFX & SWT 3
C Nach Aufruf von anderer Klasse streikt Grafik AWT, Swing, JavaFX & SWT 1
T AWT Grafik"Array" einzelne Elemente verschieben AWT, Swing, JavaFX & SWT 1
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
S Höhendaten in einer Grafik ausgeben AWT, Swing, JavaFX & SWT 2
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
S Grafik in einer Klassen einfügen/hinzufügen AWT, Swing, JavaFX & SWT 1
C 2D Grafik ein Bild soll permanent durchlaufen AWT, Swing, JavaFX & SWT 2
S 3D-Grafik 3d Grafik auf einem JPanel oder im JScrollPane AWT, Swing, JavaFX & SWT 1
F AWT Grafik wird nicht richtig aktualisiert AWT, Swing, JavaFX & SWT 2
J JTabbedPane Grafik unterhalb der Tabs AWT, Swing, JavaFX & SWT 3
F Grafik hängt sich auf AWT, Swing, JavaFX & SWT 20
S LookAndFeel GUI-Grafik AWT, Swing, JavaFX & SWT 5
J Verschwommene Grafik AWT, Swing, JavaFX & SWT 4
C LayoutManager Grafik soll nicht im GridLayout Skalieren AWT, Swing, JavaFX & SWT 3
F Grafik mit Buttons versehen AWT, Swing, JavaFX & SWT 8
C Grafik Taschenrechner AWT, Swing, JavaFX & SWT 5
J Grafik (Kreis) schneller bewegen? AWT, Swing, JavaFX & SWT 6
Kenan89 Grafik und Text in JPanel anzeigen AWT, Swing, JavaFX & SWT 8
D Fenster mit Grafik überlappen AWT, Swing, JavaFX & SWT 3
Maxim6394 Rotation einer Grafik in swing AWT, Swing, JavaFX & SWT 13
D Swing Grafik in JPanel anzeigen. AWT, Swing, JavaFX & SWT 3
W Grafik von JFrame korrekt speichern AWT, Swing, JavaFX & SWT 7
S Grafik Fehler AWT, Swing, JavaFX & SWT 15
M Swing JLabel (mit einer Grafik) aktualisieren AWT, Swing, JavaFX & SWT 2
D 2D-Grafik Problem beim Drucken eines Grafik-Objekts AWT, Swing, JavaFX & SWT 2
Daniel_L Grafik erstellen, drin zeichnen und dann speichern AWT, Swing, JavaFX & SWT 2
D Grafik über JPanels hinweg verschieben AWT, Swing, JavaFX & SWT 2
C Grafik von main aus aufrufen AWT, Swing, JavaFX & SWT 13
O Swing Label(bzw. Grafik) verdekt von anderm Label AWT, Swing, JavaFX & SWT 2
T rekursive Grafik AWT, Swing, JavaFX & SWT 5
I 2D-Grafik Problem mit schreiben von Text auf eine Grafik AWT, Swing, JavaFX & SWT 7
F Swing Framework gesucht (Swing, Chart, "Scheduling" Grafik) AWT, Swing, JavaFX & SWT 2
S Pacman-Grafik AWT, Swing, JavaFX & SWT 23
N Eigener Grafik Editor mit fehlerhafter Anzeige AWT, Swing, JavaFX & SWT 4
lordcarlos Dynamische und interaktive grafik AWT, Swing, JavaFX & SWT 5
D Systemmodale Grafik AWT, Swing, JavaFX & SWT 10
J Geladene Grafik in ImageIcon auf Panel fest positionern. AWT, Swing, JavaFX & SWT 8
W Grafik aktualisieren AWT, Swing, JavaFX & SWT 5
S Swing Zugriff auf Polyline in Grafik AWT, Swing, JavaFX & SWT 4
A Swing Bei größe verändern des Fensters Grafik weg AWT, Swing, JavaFX & SWT 3
C gute Grafik-Bibliotheken gesucht AWT, Swing, JavaFX & SWT 6
O Grafik wird nicht angezeigt AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben