# Cursor im JTextField



## Nemesys88 (30. Mrz 2015)

Hallo. 

Ich find es doof wenn man mitten in ein Textfeld (JTextField) klicken kann und dort schreiben kann..
(und der Anwender dadurch künstlich Leerzeichen erzeugt)

Gibt es eine Möglichkeit den Cursor in einem JTextField (und damit die Position an der geschrieben wird) forciert auf links zu setzen? (also so das der Cursor nicht in der Mitte ist nur weil ich da mit der Maus grad hingeklickt habe)

MfG


----------



## franky27 (30. Mrz 2015)

Macht ein JTextField doch per default so?


----------



## Nemesys88 (30. Mrz 2015)

Oh man.. musste ich auch grade feststellen.. 

Allerdings hab ich aus dem JTextField ein JFormattedTextField gemacht, weil ich nur Double-Werte zulassen wollte: 


```
tf_test = new JFormattedTextField(createFormatter());
```


```
protected final MaskFormatter createFormatter() 
	{ 
		MaskFormatter formatter = null; 
		
		try // Versuche 
		{
			// Formatter anlegen 
			formatter = new MaskFormatter("**********"); 
			// Zulässige Characters festlegen 
			formatter.setValidCharacters("0123456789. ");
		} 
		catch (java.text.ParseException exc) // Fehler fangen 
		{ 
				exc.printStackTrace(); // Fehlerausgabe 
		} return formatter; // Rückgabe des Formatters }
	}
```

Und wie reparier ich das jetzt?


----------



## Java20134 (30. Mrz 2015)

Also eine andere Idee wäre, dass du die Methode trim() von dem eingegebenen String benutzt. Damit löscht du die Leerzeichen vor und nach dem String. 
Oder wenn du immer, wenn du auf das JTextField drückst, den Inhalt auf null setzt, so musste das vllt. auch gehen. Damit der Text wieder gelöscht ist und der Cursor an erster Stelle gesetzt wird. Dabei müsstest du mit einem Listener wie FocusListener arbeiten. 

Oder was für dich eher zutreffen könnte: Benutz doch folgende Methoden vom JTextField: requestFocus() und/oder setCarePosition().


----------



## Nemesys88 (31. Mrz 2015)

> Oder was für dich eher zutreffen könnte: Benutz doch folgende Methoden vom JTextField: requestFocus() und/oder setCarePosition().



Danke.  

Hab es jetzt so gelöst: 


```
tf.addMouseListener(new MouseListener() {
			
			@Override
			public void mouseReleased(MouseEvent e) {
				if (tf.getText().trim().isEmpty()) 
				{
					tf.setCaretPosition(0);
				}	
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
				if (tf.getText().trim().isEmpty()) 
				{
					tf.setCaretPosition(0);
				}		
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
				if (tf.getText().trim().isEmpty()) 
				{
					tf.setCaretPosition(0);
				}	
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
				if (tf.getText().trim().isEmpty()) 
				{
					tf.setCaretPosition(0);
				}	
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				if (tf.getText().trim().isEmpty()) 
				{
					tf.setCaretPosition(0);
				}	
			}
		});
```
Funktioniert so ganz gut...

edit: Naja, jetzt sollte ich vllt. noch ne Else-Abzweigung bauen die falls Text drin steht und man reinklickt der Cursor hinter dem letzten Character ist...


----------



## Neumi5694 (2. Apr 2015)

Bei einem leeren JTextfield passiert das nicht, es muss schon was drinstehen, damit man an der Stelle schreiben kann, wo man hinklickt.

Kleiner Tip: Versuch es anstatt mit einem Mouselistener mal mit einem FocusListener. D.h. egal ob per Klick oder per Tab, der Cursor wird bei Fokuserhalt auf Position 0 gesetzt. So bleibt immer noch die Möglichkeit offen, gezielt per Mausklick den Cursor zu setzen oder etwas zu markieren, sobald das Feld den Fokus hat,

```
jTextField1.addFocusListener(new java.awt.event.FocusAdapter() {
            @Override
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextField1.setCaretPosition(0);
            }
        });
```


----------



## Nemesys88 (3. Apr 2015)

Ok danke.


----------

