JTextfield Model

earlgrey_tea

Aktives Mitglied
Hallo an alle,

Frage
Hat ein JTextfield ein Model?

Warum ich das brauche
In meinem Programm -- eine simple Anwendung, die aus einer Tabelleneingabe ein berechnetes Ergebnis in oben besagtes Textfeld schreibt -- möchte ich gerne nach MVC trennen.
Im Fall der von mir verwendeten Tabellen, ComboBoxen, etc. funktioniert das auch ganz gut, da ich dort im Controller auf die jeweiligen Models zugreifen kann. Um den Code sauber zu halten, möchte ich beim JTextfield genauso verfahren.

Habt ihr Vorschläge, wie das geht?
 

earlgrey_tea

Aktives Mitglied
Das hab ich der API auch gelesen, das Problem dabei ist jedoch, dass das ein Interface ist, d.h. ich müsste komplett ein eigenes Model schreiben. Beim Document ist das auch nicht gerade trivial, wenn ich mir die API anschaue.

Ich hatte gehofft, dass es sowas wie ein DefaultDocument Model oder Vergleichbares, existiert.

Update:

Ich habs nun folgendermaßen gelöst (und getestet :)):
Java:
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class TextFieldModel extends PlainDocument {
	
	public void setText(String text) {
		try {
            super.remove(0, super.getLength()); 
			super.insertString(0, text, null);
		} catch (BadLocationException e) {
			e.printStackTrace();
		} 
	}
	public String getText() {
		String rueckgabe = ""; 
		try {
			rueckgabe = super.getText(0, super.getLength());
		} catch (BadLocationException e) {
			e.printStackTrace();
		}
		return rueckgabe; 
	}
}
 
Zuletzt bearbeitet:
G

Gast2

Gast
Welchen Mehrnutzen hat jetzt dein Document im Gegensatz zu den fertigen Document Models? Warum nimmst du kein fertiges?
 

earlgrey_tea

Aktives Mitglied
So hab ich nur drei Methoden: set, get und clear (ist hier nicht mit bei). Ich finde das komfortabler. Die Methoden des PlainDocument versauen irgendwie den Code. Ich finde es besser, man kapselt es.

Kurzum: Der Quellcode im Controller bleibt auf diese Art IMHO lesbarer und intuitiver.
 
G

Gast2

Gast
So hab ich nur drei Methoden: set, get und clear (ist hier nicht mit bei). Ich finde das komfortabler. Die Methoden des PlainDocument versauen irgendwie den Code. Ich finde es besser, man kapselt es.

Kurzum: Der Quellcode im Controller bleibt auf diese Art IMHO lesbarer und intuitiver.

He macht wenig Sinn genauso wie dein Document kein Sinn macht ???:L
 

earlgrey_tea

Aktives Mitglied
Kannst du das vielleicht ein wenig erläutern? So kann ich mit deinem Hinweis wenig anfangen. Meiner Ansicht nach sind nun View (JTextField) und Model (PlainDocument) sauber voneinander getrennt. Hätte ich das nicht gemacht, müsste ich eine Referenz auf das JTextField durch den gesamten Programmcode reichen.

Weiterhelfen würden mir:
  • Ein knappes Beispiel
  • Etwas mehr Details bei deiner Kritik (Was ist konkret an der Verwendung des Documents sinnlos?)

Vielen Dank.
 
G

Gast2

Gast
Ja ich versteh den Grund nicht warum du ein eigenes Document braucht?
1. Das JTextfield hat doch genau solche Methoden?
2. Warum greifst du überhaupt direkt auf Model zu? Es gibt als Controller auch den DocumentListener, wenn du was im Model manipulieren willst...
3. Willst jetzt jedem deiner Textfelder das Document setzen?
4 Zeig mal Code was du überhaupt vorhast und wie du darauf zugreifst
 

Harry Kane

Top Contributor
Der Sinn von tea´s Document besteht offenbar darin, die Methoden zum Lesen und Schreiben von Text möglichst einfach zu halten, und das exception handling in das Document auszulagern anstatt es überall dort tun zu müssen, wo der Documentinhalt geändert wird (einen try-catch Block statt mehrerer).
@earlgrey_tea: auch ohne dein Model sind View und Model beim JTextField sauber getrennt. Du machst es nicht grundsätzlich "sauberer".
@SirWayne: Offenbar will tea sein Document in mehreren Textfeldern verwenden. Und da er seine Textfelder sowieso instanziieren muss, kann er bei der Gelegenheit gleich sein Document im ctor übergeben.
Sir Wayne hat gesagt.:
Es gibt als Controller auch den DocumentListener, wenn du was im Model manipulieren willst...
:bahnhof: Einen DocumentListener sollte man definitiv nicht verwenden, wenn man "was im Model manipulieren will", sondern dann, wenn man darüber informiert werden will, wem jemand was im Model manipuliert hat.
 
G

Gast2

Gast
:bahnhof: Einen DocumentListener sollte man definitiv nicht verwenden, wenn man "was im Model manipulieren will", sondern dann, wenn man darüber informiert werden will, wem jemand was im Model manipuliert hat.

Richtig darauf kann reagieren und eben eventuell was im Model ändern, ich hab ja kein Plan was er vorhat, ich seh immer noch keinen Vorteil von seinem tollen Dokument
 

bERt0r

Top Contributor
In meinem Programm -- eine simple Anwendung, die aus einer Tabelleneingabe ein berechnetes Ergebnis in oben besagtes Textfeld schreibt -- möchte ich gerne nach MVC trennen.
Im Fall der von mir verwendeten Tabellen, ComboBoxen, etc. funktioniert das auch ganz gut, da ich dort im Controller auf die jeweiligen Models zugreifen kann. Um den Code sauber zu halten, möchte ich beim JTextfield genauso verfahren.
Für mich macht das den Eindruck als will der TO einfach blind sein MVC Dogma umsetzen, ohne eigentlich zu wissen um was es bei dem Pattern geht. Wie man hier ganz gut sieht verwendet Swing eigentlich nicht das typische MVC, eben weil es nicht das Maß aller Dinge ist.
Du kannst bei einem JTextField mit setText und getText genau das selbe machen wie mit deinem Document. Warum machst du dir die Arbeit? Es wird dadurch nicht übersichtlicher oder strukturierter. Es wird eher unübersichtlicher, weil jemand der dienen Code liest dann noch eine Klasse mehr lesen muss.
Codetrennung, Aufteilung und Strukturierung ist wichtig, ebenso wichtig ist aber auch, dass man weiß wieso man etwas aufteilt.
 

earlgrey_tea

Aktives Mitglied
Angeregte Diskussion :D

Für mich macht das den Eindruck als will der TO einfach blind sein MVC Dogma umsetzen, ohne eigentlich zu wissen um was es bei dem Pattern geht.
[...]
Codetrennung, Aufteilung und Strukturierung ist wichtig, ebenso wichtig ist aber auch, dass man weiß wieso man etwas aufteilt.
Ich weiß ganz gut, dass Patterns einem auch wundervoll im Weg stehen können und nicht das Maß aller Dinge sind. Da ich jedoch für meine beiden Tabellen und meine ComboBox jeweils schon ein eigenes Model schreiben musste und diese im Controller erzeuge, bot es sich meiner Meinung nach an, das auch für das einzige verbliebene Element -- das JTextField -- ebenfalls umzusetzen.

Aufbauend auf den Hinweisen von Harry_Kane, und SirWayne und dem Link von bERt0r hab ich das PlainDocument nun wieder entfernt. Ich erzeuge jetzt das JTextField im Controller und reiche eine Referenz darauf in die View weiter.

Gut ich werd mich dann mal in die Lektüre zur Swing Architektur stürzen. Hat jemand von euch vielleicht einen Artikel/ ein Buch zu gutem Softwaredesign an der Hand, um solche Designschwächen zu vermeiden?
 

bERt0r

Top Contributor
Warnung: Ich bin grade alkoholisiert.
Mir ist bewusst, dass ich ziemlich deutlich mit meiner Äußerung vorhin war. Das Forum ist mMn ja genau dafür da, Probleme deiner Art zu lösen. Dir mangelt es wirklich nicht an einem guten Buch über Softwaredesign. Vielleicht irre ich mich, aber mMn kann man das nur durch Erfahrung wirklich lernen.
Im Großen und Ganzen geht es darum, sein eigenes Hirn zu gebrauchen und zu hinterfragen warum es ein bestimmtes Pattern gibt. Nur wenn man begründen kann, warum ein Pattern Sinn macht, beherrst man es auch wirklich. Deshalb solltest du nie blind ein Pattern befolgen, sondern immer in der Reihenfolge vorgehen: was ist meine Aufgabe, wie kann ich sie Erfüllen, gibt es ein Pattern dafür?
Du hast bei mir den Eindruck erweckt: Ich verwende bei meiner ComboBox und meiner JTable das MVC Pattern und will dieses Pattern jetzt für mein Textfield verwenden, koste es was es wolle.
 
G

Gast2

Gast
Ich weiß ganz gut, dass Patterns einem auch wundervoll im Weg stehen können und nicht das Maß aller Dinge sind. Da ich jedoch für meine beiden Tabellen und meine ComboBox jeweils schon ein eigenes Model schreiben musste und diese im Controller erzeuge, bot es sich meiner Meinung nach an, das auch für das einzige verbliebene Element -- das JTextField -- ebenfalls umzusetzen.

Du kannst Tabellen,Trees, Comboboxen doch nicht mit einer Checkbox, Textfeld Textarea oder sonstigem Vergleichen. In Tabellen und Trees stellst du meistens Objekte dar, in den anderen Widgets eher einfachere Sachen.

Was genau so wichtig ist, ist ein gutes Databinding zwischen deinem (Domain) Model und den Widgets zu machen. Da halte dich lieber nicht mir so Kleinigkeiten auf wie ein Dokument zu schreiben.
 

earlgrey_tea

Aktives Mitglied
bERt0r hat gesagt.:
Mir ist bewusst, dass ich ziemlich deutlich mit meiner Äußerung vorhin war.
Och, da kenn ich andere Foren... ;-)

bERt0r hat gesagt.:
Du hast bei mir den Eindruck erweckt: Ich verwende bei meiner ComboBox und meiner JTable das MVC Pattern und will dieses Pattern jetzt für mein Textfield verwenden, koste es was es wolle.
Hmmm, es könnte sein, dass der Eindruck nicht ganz unbegründet war.

SirWayne hat gesagt.:
Was genau so wichtig ist, ist ein gutes Databinding zwischen deinem (Domain) Model und den Widgets zu machen. Da halte dich lieber nicht mir so Kleinigkeiten auf wie ein Dokument zu schreiben.
Das ist mal nen Wort.

Wie auch immer, ich nehm die Diskussion zum Anslass auch meine anderen Programme auf den Prüfstand zu zerren und zu schauen, ob ich da vielleicht ein wenig zu tief in die Patternkiste geschaut hab.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Swing JTextField Sync View -> Model AWT, Swing, JavaFX & SWT 3
G Neues Model für JTextField erstellen AWT, Swing, JavaFX & SWT 8
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
I JTextfield senden über Enter AWT, Swing, JavaFX & SWT 1
H Swing Wie Fokus von JTextField entfernen? AWT, Swing, JavaFX & SWT 9
M mehrere jTextField untereinander AWT, Swing, JavaFX & SWT 1
G JTextField Änderungen überprüfen AWT, Swing, JavaFX & SWT 4
B JTextField in Panel positionieren AWT, Swing, JavaFX & SWT 1
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
R Swing JTextField nicht-kopierbarer Text AWT, Swing, JavaFX & SWT 1
R Swing JTextField - Schriftgröße je nach Länge und Größe ändern AWT, Swing, JavaFX & SWT 0
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
A Fenster genau unterhalb von JTextField anzeigen AWT, Swing, JavaFX & SWT 1
xYurisha Gui Focus von JTextField weglenken AWT, Swing, JavaFX & SWT 6
G Eingabe in JTextField in Array speichern und in JList ausgeben AWT, Swing, JavaFX & SWT 7
G JTextField Eingabe in DB speichern AWT, Swing, JavaFX & SWT 68
C JTextField Inhalt mit Maus selektieren wenn disabled AWT, Swing, JavaFX & SWT 2
R jTextField Eingabe überprüfen AWT, Swing, JavaFX & SWT 2
ralfb1105 Swing Wert in JTextField wird falsch ausgegeben AWT, Swing, JavaFX & SWT 2
D Inhalt von JTextField in MySQL speichern. Wie ? AWT, Swing, JavaFX & SWT 1
D Platzierung von JTextfield in JPanel AWT, Swing, JavaFX & SWT 3
J 100% CPU Last mit JTextField AWT, Swing, JavaFX & SWT 2
U Swing JTextField aus dem Editmodus nehmen AWT, Swing, JavaFX & SWT 1
Q-bert JTextField per Mausklick einfügen AWT, Swing, JavaFX & SWT 3
L JTextField erscheint erst nach Veränderung der Framegröße AWT, Swing, JavaFX & SWT 5
BobbGott durchsichtiges JTextField mit Hintergrund AWT, Swing, JavaFX & SWT 12
L Swing JTextField nicht sichtbar AWT, Swing, JavaFX & SWT 1
Soloeco Swing JTextField auslesen Klassen übergreifend AWT, Swing, JavaFX & SWT 16
N Swing Abfrage durch JTextField nach Button betätigung AWT, Swing, JavaFX & SWT 3
J JTextfield automatisch aus zweiter Klasse aktualisieren AWT, Swing, JavaFX & SWT 5
T ActionListener nimmt JTextField nicht mehr an. AWT, Swing, JavaFX & SWT 2
N Swing Jtextfield und Ausgabe von Wärungsbeträgen AWT, Swing, JavaFX & SWT 3
beatles Swing JTextField - Game Status aus Array anzeigen AWT, Swing, JavaFX & SWT 3
blazingblade komischerweise probleme mit jtextfield.gettext() AWT, Swing, JavaFX & SWT 9
KaffeeFan mehrere JTextField durchlaufen AWT, Swing, JavaFX & SWT 4
T JTextField Array im JPanel wird nicht komplett angezeigt AWT, Swing, JavaFX & SWT 7
K Swing unterschied JTextField und JLabel AWT, Swing, JavaFX & SWT 7
Tausendsassa Text changed event handler jTextField AWT, Swing, JavaFX & SWT 3
B jTextfield Übergabe des Strings AWT, Swing, JavaFX & SWT 16
P JTextField unsichtbar machen AWT, Swing, JavaFX & SWT 2
G .txt-Datei einlesen /formatieren in JTextfield ?? AWT, Swing, JavaFX & SWT 8
C Swing JTextField Funktion zuweisen - Löschen von Buchstaben/Sonderzeichen AWT, Swing, JavaFX & SWT 6
S JTextField parameter unveränderlich AWT, Swing, JavaFX & SWT 9
T bekomme keinen Focus auf JTextField AWT, Swing, JavaFX & SWT 3
N Cursor im JTextField AWT, Swing, JavaFX & SWT 6
T Swing NullPointerException beim auslesen von jTextField - Anfänger! AWT, Swing, JavaFX & SWT 3
A JTextField und JButtons AWT, Swing, JavaFX & SWT 2
T jTextField mit String befüllen AWT, Swing, JavaFX & SWT 1
O JTextfield wird über'drawed'.. AWT, Swing, JavaFX & SWT 6
M Swing JtextField Panel in ander Panel aufrufen AWT, Swing, JavaFX & SWT 0
S Bekomme bein Buttonklick das Jtextfield nicht ausgegeben AWT, Swing, JavaFX & SWT 8
Seikuassi Swing JTextField nimmt kein Einfügen (Strg+V) an AWT, Swing, JavaFX & SWT 4
Z Fenster leer, wenn ich ein JTextField erzeuge AWT, Swing, JavaFX & SWT 3
M Swing JTextField getText Mehtode übergeben in eine Klasse zu einer Rechnung AWT, Swing, JavaFX & SWT 1
B Swing JTextField mit Bildschirmauflösung skalieren lassen. AWT, Swing, JavaFX & SWT 4
C Geloest: JTextfield: Titel automatisch entfernen, sobald Text eingegeben wird AWT, Swing, JavaFX & SWT 1
T Internes Event-handling in TextField/JTextField AWT, Swing, JavaFX & SWT 2
T AWT JTextfield verschwindet AWT, Swing, JavaFX & SWT 10
dat_vin KeyEvent jTextField AWT, Swing, JavaFX & SWT 12
C JTextfield ohne Enter feuern AWT, Swing, JavaFX & SWT 8
W Swing JTextField nur für Integer AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
O JTextfield und JComboBox Wert in SQL Database speichern AWT, Swing, JavaFX & SWT 4
F Swing JTextField (unbeschriebbar machen) AWT, Swing, JavaFX & SWT 12
W JTextfield - Wert lässt sich nicht setzen AWT, Swing, JavaFX & SWT 3
TheJavaKid JTextField: Reine Domain herausfiltern, sonst Inhalt löschen AWT, Swing, JavaFX & SWT 1
R Swing User tippt in unsichtbares JTextField AWT, Swing, JavaFX & SWT 3
F Swing JTextField in JList (Funktion beibehalten) AWT, Swing, JavaFX & SWT 2
A Swing JLabel/JTextField Inhalt mit JSlider verändern AWT, Swing, JavaFX & SWT 12
U Swing JTextField zur Laufzeit auf Eingaben prüfen AWT, Swing, JavaFX & SWT 0
X Swing JTextField AWT, Swing, JavaFX & SWT 4
M Swing JTextField nicht ausfüllbar AWT, Swing, JavaFX & SWT 8
C Problem mit JTextField AWT, Swing, JavaFX & SWT 4
S Swing WYSIWYG JTextField AWT, Swing, JavaFX & SWT 2
vodkaz JTextField && Strings AWT, Swing, JavaFX & SWT 2
R Swing JScrollBar mit JTextField koppeln AWT, Swing, JavaFX & SWT 3
A Swing 2 JSlider verknüpfen und mit einem JTextField vergleichen, dann Ausgabe AWT, Swing, JavaFX & SWT 5
X JTextField Ausgabe klappt nicht AWT, Swing, JavaFX & SWT 4
S Swing Verzeichnis/Datei-Pfad in JTextField schreiben AWT, Swing, JavaFX & SWT 2
R Swing JTextField getText() liefert leeren String AWT, Swing, JavaFX & SWT 6
J Mausfarbe ändern JTextField AWT, Swing, JavaFX & SWT 6
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
A editable JTextField & setText AWT, Swing, JavaFX & SWT 2
M JTextField gibt beim auslesen null aus AWT, Swing, JavaFX & SWT 9
K JTextField mit Standardtext AWT, Swing, JavaFX & SWT 3
F Swing JTextfield Beispieltext soll nach Klick verschwinden AWT, Swing, JavaFX & SWT 3
TheJavaKid DocumentListener soll Text in JTextField ändern AWT, Swing, JavaFX & SWT 4
I Swing JTextField ausblenden -? AWT, Swing, JavaFX & SWT 6
0 Swing JTextField - Position ? AWT, Swing, JavaFX & SWT 2
L Button über/auf JTextField AWT, Swing, JavaFX & SWT 5
vandread Swing Probleme mit jTextField im zusammenspiel mit einem Einblendeffekt (inkl. KSKB) AWT, Swing, JavaFX & SWT 6
M Swing jTextfield und PlainDocument AWT, Swing, JavaFX & SWT 18
D JTextField über ein Game AWT, Swing, JavaFX & SWT 11
A Swing JTextField durch einen JButton leeren AWT, Swing, JavaFX & SWT 15
Kaniee Swing Woher bekommt JTextField die Eingaben? AWT, Swing, JavaFX & SWT 2
M JTextField gesperrt nach erster Benutzung... AWT, Swing, JavaFX & SWT 4
C JTextField KeyListener AWT, Swing, JavaFX & SWT 6
R JTextField mit abgerundeten Ecken - Geht über Grenze hinaus AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben