Mit Tabulator aus JTable springen


HaJoSp

Grünschnabel
Hallo,

ich habe folgendes Problem:

Eine JTable besitzt den Fokus. Normalerweise springe ich mit der Tabulatortaste von einer Zelle zur nächsten.
Ich will aber, dass der Fokus von der Tabelle direkt auf die nächste Komponente springt.
Also nicht von Zelle zu Zelle, sondern von Zelle (JTable) zu JButton.

Ich bin mir sicher, dass ihr mir helfen könnt... ;)

Vielen Dank schon mal im Vorraus
Gruß

HaJo
 

torsch2711

Erfahrenes Mitglied
Spontan würde ich jetzt sagen keylistener implementieren und drücken abfangen.

Dann wenn tab gedrückt wurde, den focus auf den nächsten JTable legen.

den keylistener musst du an den JTable hängen.

Gruss,
Torsch

P.S.: Mag sein das ein kleiner denk-fehler drin ist.
 

HaJoSp

Grünschnabel
Danke erstmal für die Antwort.

Meine erste Idee war es auch einen Listener zu benutzen.

Ich habe dazu eine Klasse "TabOrder" erstellt.
Dort habe ich die Komponenten in der gewünschten Reihenfolge in einem Vector gespeichert.
Wird Tab gedrückt bekommt die nächste Komponente den Fokus. Auf den ersten Blick klappt es auch.
Wenn die nächste Komponente aber disabled ist oder eine leere Tabelle, erhält sie zwar den Fokus, aber man sieht es nicht. Dies kann ich natürlich beheben indem ich jedesmal die nächste Komponente dahingehend überprüfe. Da es aber mit Sicherheit noch andere Ausnahmen gibt, wird die Prüfung irgendwann zu kompliziert.
Ich hoffe also noch, dass es eine einfachere Lösung gibt, z.B. das Springen zwischen den Zellen einfach ausschalten oder so.
Wenn es sowas nicht gibt, muss ich natürlich die komplizierte Lösung wählen.

Gruß
HaJo
 

HaJoSp

Grünschnabel
Hallo,

hat sich bereits erledigt.

Habs jetzt mit nem KeyStroke und dem KeyboardFocusManager gelöst.

Code:
private final KeyStroke tab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
private final ActionListener tabListener = new ActionListener(){
	public void actionPerformed(ActionEvent e){
		KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
		kfm.focusNextComponent();
	
	}
};

.
.
.

public MyJTable()
{
	super();
	this.registerKeyboardAction(tabListener, tab, JComponent.WHEN_FOCUSED);
}


Gruß

HaJo
 

torsch2711

Erfahrenes Mitglied
Hi,

danke das du deine Lösung präsentierst. Hatte ich gar nicht dran gedacht, dass es auch so lösbar ist.

Naja, merkt man das es viele techniken gibt, welche man schnell wieder vergisst ;)

Nochmal danke für die auffrischung :D

Gruss,
Torsten
 

Forum-Statistiken

Themen
272.363
Beiträge
1.558.646
Mitglieder
187.837
Neuestes Mitglied
Kalle P