SWT Textfeld mit festem und variablen Inhalt

C

ChristianB

Gast
Hallo,

erst schonmal danke für eure Hilfe!

was ich bräuchte, ist ein Textfeld, dass ein Präfix hat, dann eine Fläche wo Text eingegeben werden kann und dann noch ein Suffix. das Präfix und das Suffix sollen dabei nicht veränderbar sein, dem Nutzer muss aber visuell klar sein, dass Präfix und Suffix zum Text gehören.

Sinn dahinter ist, dass der benutzer etwas eingeben soll und bei speichern dann automatisch Präfix vorne und Sufix hinten an den eingegeben Text angehängt werden.

mal zwei Bilder, um das Ganze erkenntlicher zu machen:

Textfeld vor der Eingabe(Cursur sollte zwischen Präfix und Suffix platziert sein):


Textfeld nach der Eingabe:



Vielleich hat jemand eine Idee, wie man das schön lösen kann, einen hack mit 3 Textfelder und dann eine Border darum habe ich bereits, aber der ist nicht besonders elegant und zudem buggy ;)

Grüße, ChristianB
 

Wildcard

Top Contributor
Geht so out of the box nicht, das unterstützt das native Textfeld nicht. Ein Styled Text (wenn die farbliche Abstufung relevant ist) gepaart mit einigen Listenern sollte allerdings möglich sein.
Alternativ müsstest du dein eigenes Widget schreiben inklusive Drawing.
 

ChristianB

Mitglied
EDIT:

so jetzt passt es eigentlich ganz gut, hab keine Bugs mehr gefunden

Java:
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.custom.VerifyKeyListener;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
 
public class StyledTextFixedContentExample {
 
	static Shell shell;
	static Text backText;
	static Display display;
	static StyledText st;
	
	static String PREFIX = "PREFIX_";
	static String SUFFIX = "_SUFFIX";
	
	public static void main(String args[]){
		display = new Display();
		shell = new Shell(display);
		shell.setLayout(new FormLayout());
		 
		st = new StyledText(shell, SWT.SINGLE | SWT.BORDER);
		FormData fdst = new FormData();
		fdst.top = new FormAttachment(0, 5);
		fdst.left = new FormAttachment(0, 5);
		fdst.right = new FormAttachment(100,-5);
		st.setLayoutData(fdst);
		st.setText(PREFIX+SUFFIX);
		StyleRange styleRange = new StyleRange();
		styleRange.start = 0;
		styleRange.length = PREFIX.length()+SUFFIX.length();
		styleRange.foreground = display.getSystemColor(SWT.COLOR_DARK_GRAY);
		st.setStyleRange(styleRange);
	
		st.addVerifyKeyListener(new VerifyKeyListener() {
		
			public void verifyKey(VerifyEvent event) {
				if(st.getCaretOffset() < PREFIX.length() || 
						st.getCaretOffset() > st.getText().length() - SUFFIX.length() ||
						st.getSelectionRange().x < PREFIX.length() ||
						st.getSelectionRange().x + st.getSelectionRange().y > st.getText().length() - SUFFIX.length())
					event.doit = false;
				if (st.getCaretOffset() == PREFIX.length() && event.character == '\u0008')
					event.doit = false;
				if(st.getCaretOffset() == st.getText().length() - SUFFIX.length() && event.character == '\u007F')
					event.doit = false;
			}
			
		});
		
//		st.addKeyListener(new KeyListener() {
//		
//			public void keyPressed(KeyEvent e) {
//				if(st.getCaretOffset() <= PREFIX.length()) {
//					st.setCaretOffset(PREFIX.length());
//				}
//				if(st.getCaretOffset() >= st.getText().length() - SUFFIX.length() ||
//						st.getSelectionRange().x < PREFIX.length() ||
//						st.getSelectionRange().x + st.getSelectionRange().y > st.getText().length() - SUFFIX.length())
//					st.setCaretOffset(st.getText().length() - SUFFIX.length());
//			}
//		
//			public void keyReleased(KeyEvent e) {}
//		
//		});
		
		st.addFocusListener(new FocusListener() {
		
			public void focusGained(FocusEvent e) {
				st.setCaretOffset(PREFIX.length());
			}
		
			public void focusLost(FocusEvent e) {}
			
		});
		
//		st.addMouseListener(new MouseListener() {
//		
//			public void mouseDoubleClick(MouseEvent e) {}
//		
//			public void mouseDown(MouseEvent e) {
//				if(st.getCaretOffset() <= PREFIX.length())
//					st.setSelection(PREFIX.length());
//				if(st.getCaretOffset() >= st.getText().length() - SUFFIX.length())
//					st.setSelection(st.getText().length() - SUFFIX.length());
//			}
//		
//			public void mouseUp(MouseEvent e) {}
//			
//		});
		
		shell.pack();
		shell.open();
		 
		while (!shell.isDisposed()) {
		  if (!display.readAndDispatch()) 
		   display.sleep();
		}
		 
		display.dispose();
		
	}
 
}
 
Zuletzt bearbeitet:
G

Gast2

Gast
Sieht ganz gut aus.
Aber mit der Maus kannst du nicht den ganzen Text selektieren, sondern immer nur einen Teil. Und der Tab druck macht einen wirklichen Tab anstatt einen Focus wechsel.
 
G

Gast2

Gast
Auf die schnelle keine Idee schau doch mal wie das normale Textfeld das macht. Ist das nicht OS abhängig? Es gibt ja auch noch die Fokus-Back Taste bei Windows Shift Tab...
 

ChristianB

Mitglied
Tab hab ich gelöst:

beim erstellen des StyledText noch als style SWT.SINGLE übergeben

also anstatt:

Java:
st = new StyledText(shell, SWT.BORDER);

so:

Java:
st = new StyledText(shell, SWT.SINGLE | SWT.BORDER);

bleibt nurnoch der Fehler, dass man nicht alles selektieren kann?
hat da jemand ne Idee?

ich schätze der Mouselistener muss angepasst werden, ich weiß aber noch nicht wie
 
Zuletzt bearbeitet:

ChristianB

Mitglied
so habe es nochmal überarbeitet und im Code oben angepasst.

Hab Mouse und Keylistener jetzt ganz weggelassen, da kommen nur schlecht abschätzbare Konsequenzen raus.

Text lässt sich jetzt beliebig markieren und auch der Cursor beliebig setzen. nur Löschen und eingeben im ausgegrauten Teil ist verboten
 

ChristianB

Mitglied
hehe ;)

naja also so ganz zufrieden bin ich doch noch nicht...

man kann weder mit STRG+C was aus dem Feld kopieren (bzw. nur das nicht ausgegraute), noch funktioniert das popup nach nem rechtsklick. Das kommt generell nur bei "Text" und nicht bei "StyledText"

das Popup beim rechtsklich wäre ziemlich wichtig, ich kanns in text.class nicht finden
 
Zuletzt bearbeitet:

ChristianB

Mitglied
jemand ne Idee, wie ich das Rechtsklick-Kontextmenü (ausschneiden, kopieren, einfügen etc.) auch für "Styledtext" bekomme?

bei "Text" wird es scheinbar automatisch hinzugefügt, denn in der text.class konnte ich nichts dazu finden
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Button und Textfeld Darstellung AWT, Swing, JavaFX & SWT 3
B Scene Builder Textfeld Begrenzen AWT, Swing, JavaFX & SWT 3
T JavaFX MultiLine / MultiStyle Textfeld AWT, Swing, JavaFX & SWT 1
izoards Textfeld für Zeit AWT, Swing, JavaFX & SWT 4
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
B Ausgaben einer Umrechnung vom Textfeld in ein Label AWT, Swing, JavaFX & SWT 2
Z Swing Wert aus Textfeld auslesen -- null Fehler AWT, Swing, JavaFX & SWT 4
J SWT Textfeld markieren und kopieren AWT, Swing, JavaFX & SWT 0
A Swing nur Zahlen im Spinner(Textfeld) eingeben ! AWT, Swing, JavaFX & SWT 16
L Ein Actionlistener für ein Textfeld, anstatt viele Actionlistener für ein Textfeld AWT, Swing, JavaFX & SWT 7
karlmasutra JavaFX Verzeichnispfad wählen und an Textfeld übergeben AWT, Swing, JavaFX & SWT 2
J Text in ein Textfeld eingeben und speichern AWT, Swing, JavaFX & SWT 27
cool_brivk24 Großes Textfeld AWT, Swing, JavaFX & SWT 8
J Textfeld nicht sichtbar AWT, Swing, JavaFX & SWT 2
P Knopf gedrückt -> Textfeld befüllen AWT, Swing, JavaFX & SWT 9
P Variable einer Eingabe in anderes Textfeld schreiben AWT, Swing, JavaFX & SWT 7
T [Neuling] Textfeld Inhalt überprüfen und falsche Stellen als msg Ausgeben AWT, Swing, JavaFX & SWT 1
V Swing Eingabe aus Textfeld abholen AWT, Swing, JavaFX & SWT 6
K Swing Textfeld verstecken aber benutzen AWT, Swing, JavaFX & SWT 15
J Swing Strings werden nicht in Textfeld geschrieben AWT, Swing, JavaFX & SWT 8
P Anfängerproblem mit Textfeld AWT, Swing, JavaFX & SWT 6
C Textfeld und Label werden nicht angezeigt (Ubuntu) AWT, Swing, JavaFX & SWT 2
F Textfeld Währungszahlen und automatische Aktualisierung AWT, Swing, JavaFX & SWT 14
R AWT AWT Textfeld durch Klick auf Button erstellen? AWT, Swing, JavaFX & SWT 3
D JavaFX Textfeld Eingabe validieren AWT, Swing, JavaFX & SWT 5
W Swing Nicht-Editierbares Textfeld in Panel in ScrollPane AWT, Swing, JavaFX & SWT 9
T SWT Button soll nur sichbar sein,wenn im Textfeld der Focus ist AWT, Swing, JavaFX & SWT 4
A Textfeld.append/.setText ohne Funktion AWT, Swing, JavaFX & SWT 2
G Text im textfeld in einem Editor anzeigen AWT, Swing, JavaFX & SWT 18
A Swing Zwei Klassen mit Textfeld Eingaben vergleichen und Ausgabe erzeugen AWT, Swing, JavaFX & SWT 10
N JavaFX Textfeld nur Zahlen und nur von 5 bis 30 AWT, Swing, JavaFX & SWT 11
D Eigenes Textfeld AWT, Swing, JavaFX & SWT 8
A combobox automatisch in ein textfeld wechseln AWT, Swing, JavaFX & SWT 3
D textfeld string zu float AWT, Swing, JavaFX & SWT 5
C TextFeld in Verbindung zur ComboBox automatisch aktualisieren AWT, Swing, JavaFX & SWT 7
C Swing Button in Textfeld (JFormattedTextField) AWT, Swing, JavaFX & SWT 7
A Textfeld nachträglich einfügen AWT, Swing, JavaFX & SWT 4
D JSlider und Textfeld AWT, Swing, JavaFX & SWT 2
E Textfeld auslesen AWT, Swing, JavaFX & SWT 2
G Swing Formatiertes Textfeld mit Trennzeichen AWT, Swing, JavaFX & SWT 2
T Swing URL übergabe aus einem Textfeld AWT, Swing, JavaFX & SWT 17
L SWT Textfeld AutoCompletion AWT, Swing, JavaFX & SWT 3
SexyPenny90 NumberFormatException Textfeld AWT, Swing, JavaFX & SWT 4
P SWT Toolbar mit nur einer Schaltfläche und einem Textfeld AWT, Swing, JavaFX & SWT 2
C Textfeld automatisch befüllen AWT, Swing, JavaFX & SWT 6
S Swing Textfeld Sonderzeichen Blockiern AWT, Swing, JavaFX & SWT 2
alex_fairytail Swing Textfeld Action wenn geschrieben wird? AWT, Swing, JavaFX & SWT 6
J Textfeld Rotation AWT, Swing, JavaFX & SWT 2
C Live Suche mit TextFeld AWT, Swing, JavaFX & SWT 2
maddin86 Eingabe in Textfeld 1 synchron in Textfeld 2 ausgeben AWT, Swing, JavaFX & SWT 9
R JDateChooser Datumseingabe via TextFeld wird verworfen AWT, Swing, JavaFX & SWT 8
W Daten auf Textfeld in anderer Klasse verwenden AWT, Swing, JavaFX & SWT 4
A aus einem Textfeld in double parsen AWT, Swing, JavaFX & SWT 10
A TextField: Textfeld teilweise editierbar AWT, Swing, JavaFX & SWT 2
1 Textfeld auslesen AWT, Swing, JavaFX & SWT 11
G Swing Komponente gesucht (Textfeld mit Liste) AWT, Swing, JavaFX & SWT 2
C SWT: Mehrere Formatter in einem Textfeld AWT, Swing, JavaFX & SWT 6
D Markierter Text in Textfeld AWT, Swing, JavaFX & SWT 3
L SWT Darstellung des Datums in Textfeld? AWT, Swing, JavaFX & SWT 2
M SWT Breite von Textfeld nur ohne Layout änderbar AWT, Swing, JavaFX & SWT 2
H Ausgabe an Textfeld JTextField AWT, Swing, JavaFX & SWT 3
F In Textfeld Kommazahl anzeigen aber ohne Komma eingeben AWT, Swing, JavaFX & SWT 14
D textfeld mit 0 bis n ziffern AWT, Swing, JavaFX & SWT 11
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
C Button/Textfeld mit Variable verknüpfen AWT, Swing, JavaFX & SWT 4
X Eingabe in Textfeld soll Button aktivieren... AWT, Swing, JavaFX & SWT 12
S SWT Bei Auslösen eines Buttones ein Textfeld generieren AWT, Swing, JavaFX & SWT 2
T SWT String mitten ins Textfeld einfügen + richtige Cursorposition AWT, Swing, JavaFX & SWT 3
N Textfeld füllen sobald es den Fokus verliert AWT, Swing, JavaFX & SWT 2
M SWT Wie Textfeld hinzufügen, nach Auswahl von einem bestimmten Combobox-item? AWT, Swing, JavaFX & SWT 3
M Bilder in einem Textfeld darstellen AWT, Swing, JavaFX & SWT 2
D Objekt (Map) in Textfeld ausgeben AWT, Swing, JavaFX & SWT 10
O Intwerte in Textfeld dastellen AWT, Swing, JavaFX & SWT 4
T Textfeld autmoatisch aktualisieren AWT, Swing, JavaFX & SWT 5
G CellEditor - Kein "Textfeld" AWT, Swing, JavaFX & SWT 6
O [SWT] Autocomplete bei Textfeld in PreferencePage AWT, Swing, JavaFX & SWT 2
G SWT - TextFeld automatisch aktualisieren AWT, Swing, JavaFX & SWT 15
M Prüfen, ob in einem Textfeld/Tabelle eine Eingabe erfolgt is AWT, Swing, JavaFX & SWT 11
F addSelectionListener für ein Textfeld AWT, Swing, JavaFX & SWT 10
K Textfeld wird nur jedes zweite Mal aktualisiert AWT, Swing, JavaFX & SWT 3
V Shortcuts nicht im Textfeld AWT, Swing, JavaFX & SWT 2
A Fokus in ein Textfeld setzen funktioniert nicht AWT, Swing, JavaFX & SWT 3
A Werte in ein Textfeld übernehmen AWT, Swing, JavaFX & SWT 4
A Fehler beim Auslesen aus einem Textfeld AWT, Swing, JavaFX & SWT 2
C Komme nicht an mein textfeld AWT, Swing, JavaFX & SWT 3
B Textfeld, Rollbaken: Eingabe klappt nicht AWT, Swing, JavaFX & SWT 2
P Textfeld einbinden AWT, Swing, JavaFX & SWT 4
P TextFeld Focus entfernen AWT, Swing, JavaFX & SWT 2
7 Zeilenumbruch in Textfeld AWT, Swing, JavaFX & SWT 3
S Textfeld soll auf Änderungen von nutzer und program reagiern AWT, Swing, JavaFX & SWT 3
G Datensätze aus DB in TextFeld ausgeben AWT, Swing, JavaFX & SWT 18
F Wie Oberfläche verbessern? (JButtons, Textfeld verkleinern) AWT, Swing, JavaFX & SWT 5
K Textfeld Programm soll auf Eingabe warten! AWT, Swing, JavaFX & SWT 4
M In Textfeld Textbereiche sperren? AWT, Swing, JavaFX & SWT 2
N SWT Textfeld und Verifylistener AWT, Swing, JavaFX & SWT 11
D Textfeld mit unterschiedlichen Formatierungen AWT, Swing, JavaFX & SWT 3
P SWT: Textfeld an Fenstergröße anpassen AWT, Swing, JavaFX & SWT 3
G Textfeld auslesen und auf der Konsole ausgeben? AWT, Swing, JavaFX & SWT 10
J AWT-Textfeld Aussehen ändern AWT, Swing, JavaFX & SWT 13
T Datum in Textfeld automatisch formatieren AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben