# Per TAB-Taste aus TextArea wieder raus?



## Luy (8. Sep 2009)

Hallo Leute,
bisher habe ich nur in diesem Forum gestöbert und gelesen und dabei schon viele hilfreiche Tipps gefunden! :toll:
Doch zu meinem aktuellen Problem habe ich leider nix gefunden. ;(
Darum brauche ich nun eure Hilfe...

Ich habe einen kl. Frame erstellt und da drin, per TableLayout, ein Textfeld (Titel), eine TextArea (Beschreibung) und 3 Buttons (Clear)(Save)(Cancel) angeordnet.

Per TAB-Taste möchte ich zu den einzelnen Komponenten springen.
Doch wenn ich aus dem Textfeld in die TextArea "tabbe" bleibe ich natürlich darin hängen. ;(
Sprich: bei erneutem drücken der TAB-Taste wird lediglich ein TAB-Space eingefügt, usw. usw.
Aber ich möchte ja, dass zum nächsten Element gesprungen wird, nämlich dem (Clear) Button in diesem Fall.

Hat jemand ne Idee?
Und..ähm...wenn ich noch erwähnen dürfte...bitte nicht zu kompliziert, 
denn ich bin noch ziehmlich am Anfang meiner Javaprogrammierer Karriere. 

Ich hoffe ich habe mich verständlich ausgedrückt und bedanke mich im Voraus für jede Antwort!


----------



## eRaaaa (8. Sep 2009)

hi,

entweder ohne programmierung mit strg+tab *g* oder du hängst vllt einen keylistener(adapter) an deine textarea:


```
JTextArea area = new JTextArea();
area.addKeyListener(new KeyAdapter() {
			
			
			@Override
			public void keyPressed(KeyEvent e) {
				if(e.getKeyCode() == KeyEvent.VK_TAB)
		        {
					e.consume();
					((JTextArea) e.getSource()).transferFocus();
		          
		        }
			}
		});
```

gruß


----------



## DamienX (8. Sep 2009)

Wenn du nicht unbedingt in das Textfeld springen musst gäbs die Möglichkeit mit einer FocusTraversalPolicy...

sprich du kannst festlegen zu welcher Komponente gesprungen oder zurückgesprungen werden soll.

Näheres dazu findest du hier:
How to Use the Focus Subsystem (The Java™ Tutorials > Creating a GUI with JFC/Swing > Using Other Swing Features)
Allerdings werden hier schon ein paar "basics" vorausgesetzt. 

Wenn du allerdings unbedingt auch ins Textfeld springen willst is die Lösung von
eRaaaa wohl die klügere. 

Vllt. ist sowas auch schon im Focus system von Java vorgesehen. Davon wüsste ich allerdings nichts.

Mfg Alex


----------



## Luy (8. Sep 2009)

Juhuu!!!
Super geil !!!! :applaus:

Klappt hervorragend! Besten Dank!!! :toll:


Nun noch schnell eine Verständnisfrage, damit ich das auch richtig kapiere:

e.consume();  --> fängt die eigentliche Funktion ab

Und
((JTextArea) e.getSource()).transferFocus();   --> verpasst "VK_TAB" praktisch eine neue Funktion, und zwar das der "Focus" gewechselt werden soll. Wahrscheinlich dafault-mäßig zum nächsten Element.

Nur das Casting zur (JTextArea) leuchtet mir noch nicht so ganz ein...  :bahnhof:


LG Luy


----------



## eRaaaa (8. Sep 2009)

ohne den cast, könntest du die methoden der jtextarea (.transferFocus()) nicht aufrufen, weil dir e.getSource nur object zurückliefert.


----------



## Luy (8. Sep 2009)

ok, danke dir!


----------

