2010-01-29 5 views
8

Come impedire a un campo di testo su più righe di "sottrarre" le pressioni dei tasti di tabulazione?Utilizzare il tasto Tab su un testo multilinea archiviato in swt?

Voglio dire: mi piacerebbe usare TAB per scorrere tra gli elementi di una finestra, ma quando inserisco il testo multilinea, TAB diventa una chiave "normale" e semplicemente inserisce tabulatori nel testo che sto digitando .

Come gestirlo? Devo scrivere un listener personalizzato o posso modificare il comportamento del componente utilizzando una costante SWT?

risposta

20

SWT definisce un meccanismo per implementare questo tipo di comportamento utilizzando la classe TraverseListener. Il seguente frammento (preso da here) mostra come:

Text text1 = new Text(shell, SWT.MULTI | SWT.WRAP); 
text1.setBounds(10,10,150,50); 
text1.setText("Tab will traverse out from here."); 
text1.addTraverseListener(new TraverseListener() { 
    public void keyTraversed(TraverseEvent e) { 
     if (e.detail == SWT.TRAVERSE_TAB_NEXT || e.detail == SWT.TRAVERSE_TAB_PREVIOUS) { 
      e.doit = true; 
     } 
    } 
}); 
2

Aggiungere un listener di tasti al campo di testo o textarea e implementare un gestore speciale per TAB. Ho visto questo 'tab catching' anche nelle applicazioni Swing e di solito è fastidioso.

si potrebbe offrire un altro gestore per Maiusc - TAB che poi sarebbe inserire un \t, se si vuole ancora consentire schede nel campo di testo.

+0

Funziona, grazie mille. –