2013-06-04 12 views
18

È possibile creare un composito focalizzabile in SWT? Sto rilevando tutti gli eventi della tastiera tramite il filtro Display, ma ci sono alcuni problemi quando l'attenzione è sull'albero o sull'elenco: l'azione predefinita di GTK + è cercare nei contenuti del controllo.Rendere attivo il composito in SWT

Quello che voglio fare è mescolare SWT e AWT con componente AWT focalizzabile. Sono riuscito a rendere il widget AWT non focalizzabile e ho aggiunto il filtro di visualizzazione per rendere il componente AWT ricevendo eventi di tastiera (ma non direttamente), anche quando non è focalizzato. Ma ci sono diversi problemi quando alcuni controlli SWT sono focalizzati - è per questo che voglio rendere focalizzabile il composito.

Quindi la mia ultima domanda è: è possibile rendere il focus del composito SWT?

+1

Non è un duplicato ... Nell'argomento collegato sopra, l'utente vuole fare qualcosa di completamente diverso ... Vuole saltare determinati controlli in Composito; Voglio rendere la tastiera composita-focalizzabile. Non c'è bisogno di chiudere la mia domanda perché non ho ancora nessuna risposta. – m4tx

+0

Il punto di quella domanda è esattamente lo stesso: per selezionare la scheda il composito. Ti consiglierei di provare la soluzione dalla risposta a questa domanda. – Eugene

+3

No ... Non desidero selezionare scheda composita. Voglio rendere la tastiera composita-focalizzabile; fai in modo che gli eventi della tastiera che catturano compositi facciano clic su di esso (proprio come fai quando fai clic, ad esempio sulla casella di testo); Ripeto: non voglio selezionarlo. E non posso provare la soluzione dalla risposta a questa domanda, perché non ho alcun controllo nel mio composito (o, per essere precisi, ho 1 controllo AWT in questo composito SWT, ma non voglio rendere AWT controllo focalizzabile perché causa un sacco di problemi ...). – m4tx

risposta

3

Se uno Composite contiene widget secondari, l'azione predefinita è di mettere a fuoco quando è selezionata. Per aggirare questo, avviare estendendo la classe Composite in quanto tale:

class FocusableComposite extends Composite 
{ 
    public FocusableComposite(Composite parent, int style) 
    { 
     super(parent, style); 
    } 

    public boolean setFocus() 
    { 
     return super.forceFocus(); 
    } 
} 

Quindi utilizzare un MouseListener su una nuova istanza di FocusableComposite chiamare setFocus() direttamente ogni volta che il Composite viene fatto clic:

Composite composite = new FocusableComposite(shell, SWT.NONE); 

composite.addMouseListener(new MouseAdapter() 
{ 
    public void mouseDown(MouseEvent event) 
    { 
     ((Composite)event.widget).setFocus(); 
    } 
}); 
Problemi correlati