2011-01-20 28 views
5

La classe del pulsante SWT ha un metodo setForeground(Color) ma sembra non avere alcun effetto (il metodo è in realtà sulla superclasse di Button). Javadoc dice che questo metodo è un suggerimento e può essere ignorato dalla piattaforma. La mia piattaforma è Windows.Come impostare il colore di primo piano del pulsante SWT?

  • Ciò significa che non è possibile impostare il colore del pulsante in primo piano su Windows?
  • Funziona su altre piattaforme?
  • C'è una soluzione alternativa?

risposta

5

Su Windows, setForeground per Buttons non ha alcun effetto.

Per ovviare al problema, aggiungere PaintListener al numero Button. Nel metodo paintControl di Listener, ottieni l'evento GC generato e, con esso, riscrivi il testo del tuo Button utilizzando il colore che desideri.

È possibile, infatti, disegnare qualsiasi cosa sul proprio Button.

+1

Grazie Mario . C'è voluto un po 'di giocherellare per ottenere il posizionamento corretto ma il tuo consiglio ha fatto il lavoro. –

+0

@Kevin Stembridge Sono nuovo di SWT GC, puoi aiutarmi con come ottenere il posizionamento corretto? Sembra difficile perché il testo può essere allineato in modo diverso. Grazie! – RAY

+0

Il posizionamento può essere effettuato tramite il metodo getSize() del metodo Button e stringExtent() di GC. In questo modo puoi ottenere la dimensione del pulsante e la dimensione del testo. – Alex

0

Su windows, setForeground non funziona nemmeno per il gruppo.

Se riesci a convincere i tuoi utenti a utilizzare il tema classico, setForeground funzionerà miracolosamente.

2

Se è necessario il pulsante con stile SWT.CHECK, è possibile provare a utilizzare il pulsante senza testo e aggiungere l'elemento Etichetta. Esempio:

chkAutorun = new Button(fCompositeLogin, SWT.CHECK); 
Label lblAutorun = new Label(fCompositeLogin, SWT.NONE); 
lblAutorun.setForeground(white); 
lblAutorun.setText("Autorun"); 
0

Questo è il codice per implementare colore di primo piano nel Bottoni in SWT con permettendo chiave mnemonico per essere mostrato anche e attivato premendo Alt + "Mnemonic chiave";

Button radioButton=new Button(parent,SWT.RADIO); 
StringBuffer sb = new StringBuffer("I am a Coloured radio button"); 
String name=null; 
String S = "I am a Coloured radio button"; 
String substr="C"; 
int i=S.indexOf(substr); 
sb.insert(i,"&"); 
S=sb.toString(); 
name=sb.substring(i, i+2); 
name=sb.toString(); 
String whiteSpace=" "; 
final String TName=S; 

for(int l=0;l<1000;l++) 
    whiteSpace=whiteSpace.concat("   "); 

radioButton.setText(name+whiteSpace); 

radioButton.addPaintListener(new PaintListener(){ 
String name=TName; 
    @Override 
    public void paintControl(PaintEvent e) { 
     // TODO Auto-generated method stub 
     e.gc.setForeground(hex2Col("ffffcc")); 
     int x=21; 
     int y=21; 
     e.gc.drawText(name, x,y,SWT.DRAW_MNEMONIC | SWT.TRANSPARENT); 

    } 

}); 

Nota: hex2Col è il mio metodo per convertire esadecimale codice colore per Tipo Colore

Nota: Qui ALT + C è mnemonico combinazione chiave che ho usato

Problemi correlati