MVC Aktualisierung von TextArea

Status
Nicht offen für weitere Antworten.

Stillmatic

Mitglied
Nabbend!

Ich habe ein kleines Problem!

Ich frage mich gerade, wie ich die Änderungen die vom Benutzer in einem TextArea Feld durchgeführt wurden, in das Model bekomme.
Im Update vom View setzte ich die Felder auf die Werte des Models.

Ich habe ActionListener in der Controller Klasse für ein TextArea Feld!
Java:
	class textAreaChange implements KeyListener{
		@Override
		public void keyPressed(KeyEvent e) {
			
			setChanged();
			notifyObservers( model );
		}

		@Override
		public void keyReleased(KeyEvent e) {
			setChanged();
			notifyObservers( model );
		}

		@Override
		public void keyTyped(KeyEvent e) {
			setChanged();
			notifyObservers( model );
		}
			
	}

In den Funktionen update ich das View.
Doch zuvor muss ich die Daten doch in mein Model schreiben(??) !
Doch wie, wenn ich aus dem Controller heraus keinen Zugriff auf das Modell habe?

Ich möchte die Daten nach jedem Zeichen in den Variablen speichern, weil ich überprüfen muss ob das Textfeld nicht schon voll ist.
Also, ich möchte maximal 50 Zeichen zulassen!

Benötigt man dafür ein Object des Modells?
 
du hast ne (J?)TextArea .. das is ja ne JTextComponent, die haben alle bereits ein Document-Derivat als Model intus. Das heisst wenn du die Eingabe limitieren möchtest, kannst du dir auch eine Art LimitedCharDocument extends PlainDocument - Klasse schreiben, dort gibts die Methode insertString, welche dann immer aktiv wird, wenn der Nutzer was tippt oder einfügt.

Da kannst in der Klasse dann deinen Zähler einbauen und weitere Eingaben einfach verschlucken sozusagen .. gugg mal in die FAQ da gibts Bsp für auf Zahlen-beschränkte Docments
 
Also ein zunächst einfacher Weg wäre es tatsächlich via KeyListener und dann die Ereignisse konsumieren, wenn die Maximallänge des überschritten werden würde. Dann kommen aber Probleme, wenn man z.B. via Copy&Paste einfügt, also rate ich davon aus eigener Erfahrung ab 😉

diggaa1984s Weg über ein eigenes
Code:
java.swing.text.Document
halte ich auch für am sinnvollsten. Du erbst von einem Document (PlainDocument oder StyledDocument, jenachdem was du brauchst) und überschreibst die insert-Methode. Das Document hängst du an deine JTextComponent und fertig ist's 🙂

Aber warum ich schreibe ... willst du die Gesamtlänge des Textes beschränken oder die Zeilenlänge? Für letzteren Fall habe ich neulich eine Lösung gesucht und auch gefunden, die ist aber nicht so simpel.
 
Könntest du mir nen Link zu dem Thread im Faq geben!
Suche jetzt schon 1/2 Stunde und hab es noch nicht gefunden!

thx
 
jtextfield-dokumentarten

da haste 😀 .. sind wie erwähnt Beispiele für die Beschränkung auf bestimmte Zahlen soweit wie ich mich erinnern kann. Was du machen musst, definiere in diesem Dokument ne Gesamtlänge und bei der insertString-methode fügst den text einfach ein (super.inserString(...)) solange die Gesamtlänge nicht erreich wurde.

das Document wie Kroko bereits erwähnte, an die GUI-Komponente hängen (setDocument(...))
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben