2010-07-22 14 views
7

In questo momento sto cercando di cambiare il colore di sfondo di un'org.eclipse.swt.widgets.Button con il seguente codice:Modifica org.eclipse.swt.widgets colore di sfondo in Windows

 
    Button sceneButton = new Button(border, SWT.TOGGLE | SWT.FLAT); 
    sceneButton.setBackground(Color.RED); 

questo funziona bene quando eseguo il programma in Solaris, ma non esegue nulla quando eseguo il codice in Windows. È possibile? In caso contrario, c'è qualche soluzione che mi permetterebbe di cambiare il colore di sfondo (anche se il "colore" è un'immagine) mentre mostro ancora testo nel pulsante? Grazie!

risposta

5

Non è possibile. Nella documentazione del metodo di Control.setBackground(), si è detto:

For example, on Windows the background of a Button cannot be changed.

+0

L'ho letto prima di postare e ho capito che probabilmente era impossibile. Mi stavo chiedendo se qualcuno ha avuto questo problema/ha escogitato una sorta di soluzione alternativa, anche se la soluzione alternativa è incredibilmente hacky. –

+2

Forse un'etichetta con l'immagine di un pulsante colorato con il colore desiderato. E un'immagine extra quando fai clic sul pulsante. –

+0

Abbiamo appena scelto di inserire un'Immagine di sfondo sul pulsante, che ha colorato l'area tra il pulsante e il bordo del pulsante. In alternativa, avremmo potuto utilizzare il bridge SWT_AWT e i pulsanti SWT integrati nella GUI, ma ciò sarebbe stato eccessivamente complicato e avrebbe richiesto troppo tempo. Grazie! –

4

Lo sfondo di un tasto in Windows è impostato al di fuori della SWT.

Fare clic con il pulsante destro del mouse sul desktop, quindi fare clic su Proprietà.

Passare alla scheda "Aspetto".

Fare clic su "Avanzate".

Credo che "oggetti 3D" determinino lo sfondo del pulsante. Questo è determinato dal tema di ciascun utente.

alt text

Una cosa grande circa SWT è utilizza i widget sistema sottostante e temi. Una cosa frustrante di SWT è che utilizza i widget e i temi di sistema sottostanti.

+0

Sfortunatamente, questo programma è in esecuzione sia su Solaris che su Windows e i comportamenti devono essere il più possibile simili. –

+0

Una quantità frustrante di colori Windows è controllata dal tema di sistema. Ti auguro buona fortuna con il tuo progetto. – Zoot

12

Su sistemi operativi Windows button.setBackGround non funziona direttamente. Un piccolo frammento di codice può aiutare. Sovrascrivere l'evento vernice di tasto come illustrato di seguito: -

----- obj è nome del pulsante nel frammento qui sotto ------------

obj.addPaintListener(new PaintListener() { 
@Override 
    public void paintControl(PaintEvent arg0) { 
    // TODO Auto-generated method stub 
    obj.setBackground(display.getSystemColor(SWT.COLOR_BLACK)); 
    org.eclipse.swt.graphics.Pattern pattern; 
    pattern = new org.eclipse.swt.graphics.Pattern(arg0.gc.getDevice(), 0,0,0,100, arg0.gc.getDevice().getSystemColor(SWT.COLOR_GRAY),230, arg0.gc.getDevice().getSystemColor(SWT.COLOR_BLACK),230); 
    arg0.gc.setBackgroundPattern(pattern); 
    arg0.gc.fillGradientRectangle(0, 0, obj.getBounds().width, obj.getBounds().height, true); 
    } 
}); 
+0

Ho anche impostato il colore per il mio Combo readonly in bianco a modo tuo.Ma quando non si imposta lo sfondo come colore nero, il rettangolo copre completamente il Combo (non può vedere il testo). Come posso impostare il colore per Combo senza cambiare il colore di sfondo? Grazie –

1

È possibile simulare un pulsante usando CLabel. Aggiungi un mouselistener per modificare lo sfondo del mouse e del mouse e, nel mouse su evento, invia un evento listener di selezione in modo che si comporti come un pulsante. Per esempio:

Color bg = ... 
Color shadow = ... 
CLabel simulatedButton = new CLabel(parent, SWT.PUSH); 
simulatedButton.setBackground(bg); 
simulatedButton.addMouseListener(new MouseAdapter() { 

    @Override 
    public void mouseUp(MouseEvent e) { 
    simulatedButton.setBackground(bg); 
    notifyListeners(SWT.Selection, new Event()); 
    } 

    @Override 
    public void mouseDown(MouseEvent e) { 
    simulatedButton.setBackground(shadow); 
    } 
}); 

brevemente cambia lo sfondo del pulsante mentre si sta premendo il mouse per dare l'effetto di clic su un pulsante. Inoltre, CLabel può essere esteso, diversamente dagli altri widget SWT, quindi puoi creare una sottoclasse se devi farlo spesso.

Problemi correlati