JTextField, Eingaben immer groß

MS-Tech

Erfahrenes Mitglied
Hallo Zusammen,

ich habe ein JTextField bzw. ein JFormattedTextField mit einem Maskformatter. Ich möchte, dass jeder Buchstabe, der eingegeben wird, immer in Großbuchstaben umgewandelt und dann angezeigt wird. Wie kann ich sowas einfach lösen? Eigenes Document, KeyListener?

Viele Grüße
Sascha
 
also ganz spontan würde ich sagen nen keylistener der be jedem change sowas wie setText(getText().toUpperCase());
aufzurufen. ich glaub das müsste funktionieren, ich schau mal fix

edit:
Java:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JTextField;


public class TextFieldText extends JFrame implements KeyListener{
	
	private JTextField text;
	
	public TextFieldText(){
		super("Test");
		init();
		setVisible(true);
	}
	
	public void init(){
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(null);
		setBounds(200,200,200,200);
		text = new JTextField();
		text.setBounds(50,50,100,50);
		text.addKeyListener(this);
		getContentPane().add(text);
	}
	
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyReleased(KeyEvent e) {
		text.setText(text.getText().toUpperCase());
	}
	
	public static void main(String[] args){
		TextFieldText t = new TextFieldText();
	}


}

funktioniert super, nur das man noch kurz sieht das er von klein zu groß macht ... man könnte glaub ich auch den neuen buchstaben "abfangen" und groß machen. das ist aber glaub ich nicht ganz so simpel, hab ich auf anhieb jetz nicht hinbekommen, aber wenn dich das "wechseln" von klein zu groß stört kann ich noma bisl probieren ^^
 
Zuletzt bearbeitet:
Hallo,

alternativ setzt du ein Document für das JTextField und überschreibst die insertString-Methode.
Java:
JTextField textField = new JTextField();
textField.setDocument(new PlainDocument() {
	@Override
	public void insertString(int offset, String str, AttributeSet attr)
			throws BadLocationException {
		super.insertString(offset, str.toUpperCase(), attr);
	}
});

Gruß,
Martin
 
Hallo Zusammen,

ich muss erst mal ein bisschen Code posten.

Also ich habe ein JFormattedTextField mit einem Maskformatter.

Code:
MaskFormatter formatter = new MaskFormatter("****-****-****-****-****-****-****-****");
JFormattedTextField field = new JFormattedTextField(formatter);

Es sollte ein Eingabefeld für eine Seriennummer werden, in das nur Großbuchstaben oder Zahle eingegeben werden können, eben wie eine Seriennummer.

@I2oxxi
Ich habe den Keylistener ausprobiert und dieser funktioniert zwar, jedoch reagiert dieser auch auf Tasten, wie z.B. STRG etc und die Curserposition springt bei Eingabe immer an die letzte Stelle. Ich denke das liegt am MaskFormatter und an der setText(..) Methode.

@Maddin
Ich hatte gestern schon ein Dokument gesetzt und die insertString(..) Methode überschrieben, jedoch werden die Zeichen erst beim Verlassen des Feldes groß angezeigt. Ich hätte aber gern die Großbuchstaben bei Eingabe.

Das ganze sollte ähnlich anderer Softwareprodukte sein, wenn dort die Seriennummer ein

Grüße
Sascha
 
versuch mal
Java:
		if(!e.isActionKey())
			text.setText(text.getText().toUpperCase());

edit:: ok hab dein programm mal nachgestellt, ja es liegt am settext, dadurch springt er... ich schau mal was man da so machen könnte

edit2:: bin ratlos, ich kriegs nich hin, srii ^^
 
Zuletzt bearbeitet:
Hi,

man müsste sich die Cursorposition merken und diese dann irgendwie nach dem setText setzen, wenn das möghlich ist.

Grüße
 
also, ich bin ein bischen weiter gekommen, nur muss man irgendwie anders als mit settext anhängen, aber wie find ich einfach nicht raus, vielleicht hilft dir das ja und du schaffst den rest ^^

Java:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.text.ParseException;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.text.MaskFormatter;



public class TextFieldText extends JFrame implements KeyListener{
	
	MaskFormatter formatter = new MaskFormatter("****-****-****-****-****-****-****-****");
	JFormattedTextField text = new JFormattedTextField(formatter);
	
	public TextFieldText() throws ParseException{
		super("Test");
		init();
		setVisible(true);
	}
	
	public void init() throws ParseException{
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(null);
		setBounds(200,200,500,200);
		text.setBounds(50,50,300,50);
		text.addKeyListener(this);
		getContentPane().add(text);
		formatter.setValidCharacters("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
	}
	

	
	public static void main(String[] args) throws ParseException{
		TextFieldText t = new TextFieldText();
	}

	@Override
	public void keyTyped(KeyEvent e) {
		String s = ""+e.getKeyChar();
		if("abcdefghijklmnopqrstuvwxyz".contains(s))
			System.out.println();
			// irgendwie ricthig s.toUpperCase() anhängen
	}

	@Override
	public void keyPressed(KeyEvent e) {
		
		
	}

	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
	
	



}
 
Ihr macht euch zu viel Stress o_O

Es reicht völlig aus ein PlainDocument zu setzen. Allerdings musst du dann nicht die Methode insertString() überlagern, sondern replace().
Java:
field.setDocument(new PlainDocument() {
	@Override
	public void replace(int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
		super.replace(offset, length, text.toUpperCase(), attrs);
	}
});

Und an die Position des Zeigers kommt man über getCaretPosition(), das Setzen ist analog dazu setCaretPosition().
 
Hallo Zusammen,

na dann werde ich das mal ausprobieren. Vor Jahren hatte ich das schon mal gemacht....aber vergessen :).

Viele Grüße
Sascha
 
Zurück