2016-04-22 17 views
0

Ich habe eine TabFolder mit ein paar TabItems erstellt.TabFolder ändert die Auswahl selbst nach dem ersten Klick

Standardmäßig ist das erste Element ausgewählt. Aber wenn ich den ersten Mausklick auf die entsprechende Composite die TabFolder ist auf, um einen anderen Artikel als die, die bereits ausgewählt ist, wird es nur diesen Artikel kurz auswählen, bevor es die Auswahl des ersten Artikels wieder herstellt.
Aber nachdem Sie einmal auf TabFolder geklickt haben und damit den Fokus gewinnen, funktioniert alles wie erwartet.

Ich habe mit SelectionListeners überprüft, dass die Neuauswahl keine SelectionEvent auslöst und daher nehme ich an, dass dies eine Art internes Verhalten ist.

Hat jemand dieses Problem schon einmal gehabt oder weiß, wie man das TabFolder davon abhält, das erste Element erneut auszuwählen?

Hier ist, wie ich schaffe das TabFolder:

protected void createContent(Composite parent) { 
    InfoComposite comp = new InfoComposite(parent, SWT.NONE); 
    comp.setBackground(parent.getBackground()); 
    comp.setForeground(parent.getForeground()); 

    parent.setLayout(new FillLayout()); 
    comp.setLayout(new FillLayout()); 

    folder = new TabFolder(comp, SWT.TOP); 

    // inherit color scheme 
    folder.setForeground(comp.getForeground()); 
    folder.setBackground(comp.getBackground()); 
} 

EDIT:
Ich sollte erwähnen, dass dieses TabFolder Teil einer AbstractInformationControl in Eclipse ist. Ich weiß nicht, ob das etwas mit meinem Problem zu tun hat.

EDIT2:
Ich vermute jetzt stark, dass dies ein Fokusproblem ist. Ich behielt den Fokus und es stellte sich heraus, dass sich die TabItem nicht wirklich auf den ersten Klick konzentriert. Es ist immer die StyledText, die von der ersten enthalten ist TabItem ... Nur mit dem zweiten Klick bekommt die TabFolder tatsächlich den Fokus.
Ist es möglich, dass die TabFolder nicht fokussiert wird, wenn Sie auf eine der Registerkarten klicken?

+1

Kannst du ein [MCVE] erstellen (http://StackOverflow.com/Help/Mcve)? – Baz

+0

ich werd was ich sehen kann tun ... – Raven

+0

So stellte sich heraus, dass ich das Problem nicht reproduzieren kann, da es nicht durch den '' TabFolder'' verursacht zu sein scheint, sondern durch Fokusprobleme stattdessen ... Siehe meine zweite Bearbeitung mehr Informationen – Raven

Antwort

0

Obwohl ich immer noch nicht die Wurzel des Problems kenne, habe ich herausgefunden, dass es wahrscheinlich ein Fokusproblem ist.

Da das Problem jedoch nur beim ersten mouseClick auftritt, bestand die Aufgabe für mich darin, dieses erste mouseClick programmatisch zu simulieren, wenn die Maus den entsprechenden Bereich des TabFolder betritt.

PlatformUI.getWorkbench().getDisplay().addFilter(SWT.MouseHover, new Listener() { 

@Override 
public void handleEvent(Event event) { 
    // Check that this is the proper widget the action should be performed on 
    event.widget.notifyListeners(SWT.MouseDown, new Event()); 
    event.widget.notifyListeners(SWT.MouseUp, new Event()); 
}); 

EDIT:
Ich weiß jetzt, dass dieses Problem durch die Tatsache verursacht wird, dass der TabFolder Teil der InformationControl in Eclipse ist, öffnet sich ein „anderes“ Fenster (ein angereichertes ein "), wenn Sie darauf klicken Aber meine "angereicherte" Version war wieder das selbe Fenster und somit das "Focus Problem"

Verwandte Themen