2010-12-11 11 views
3

Ich brauche eine Button Build von einem IAction. Soll ich das selbst machen oder gibt es in JFace schon etwas, das ich wiederverwenden kann? Beachten Sie, dass ich die Button-Instanz brauche, weil ich sie in einem Dialog zur Standard-Schaltfläche machen möchte.SWT: So erstellen Sie eine einfache Drucktaste aus einer Aktion

Mit new ActionContributionItem(action).fill(parent); Ich bin nicht in der Lage, die Schaltfläche Instanz zu bekommen.

+0

Danke für die Erwähnung dieser 'ActionContributionItem.fill' Methode, das hat mir wirklich geholfen. –

Antwort

1

Nach fill(parent) Ich denke, dass Sie parent.getChildren() aufrufen können. Ich erwarte, dass die neue Schaltfläche der letzte Eintrag im zurückgegebenen Control [] ist. Deshalb:

Control kids[] = parent.getChildren(); 

if (kids != null && kids.length != 0) { 
    getShell().setDefaultButton((Button)kids[kids.length - 1]); 

} 

Wenn es nicht am Ende stecken ist, werden Sie die Liste Liste der Kinder bekommen müssen vor und nach, und den neuen Eintrag finden ... aber es wird mit ziemlicher Sicherheit auf dem gehefteten wird Ende.

+0

Danke, das mache ich jetzt. Ein kleiner Hack, hilft aber im Moment. – Mot

3

Ich denke, dass es besser ist, getWidget() Methode von ActionContributionItem zu verwenden, um Button Instanz zu ActionContributionItem Instanz zu erhalten.

ActionContributionItem aci = new ActionContributionItem(action); 
    ai.fill(parent); 
    Button widget = (Button) ai.getWidget(); 
+2

+1 Viel besser, ja. Casting auf einen Button ist ziemlich gutartig im Vergleich zu "schnappen Sie sich das letzte Kind und hoffe, es ist unser Knopf und werfen Sie es auf einen Knopf". –

+0

Ja, aber API ist in diesem Fall ziemlich seltsam, denn wenn du 'fill' Methode nicht verwendest und' ToolBarManager/MenuManager/CoolBarManager' mit 'add' Methode verwendest, bekommst du' ToolItem/MenuItem' anstelle von 'Button' mit' getWidget-Methode. Es wäre schön, die API der Aktionen komplexer zu gestalten und nicht die darunter liegenden Widgets zu greifen. –