2010-07-22 13 views
7

Im Moment bin ich versucht, die Hintergrundfarbe einer org.eclipse.swt.widgets.Button mit dem folgenden Code zu ändern:Ändern org.eclipse.swt.widgets Hintergrundfarbe in Windows

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

Dies funktioniert in Ordnung, wenn ich das Programm in Solaris ausführe, aber nichts tut, wenn ich den Code in Windows ausführe. Ist das möglich? Wenn nicht, gibt es eine Art Workaround, die es mir erlauben würde, die Hintergrundfarbe zu ändern (selbst wenn die "Farbe" ein Bild ist), während immer noch Text in der Schaltfläche angezeigt wird? Vielen Dank!

Antwort

5

Sie können nicht. In der Dokumentation der Methode Control.setBackground() wird erwähnt:

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

+0

Ich las das vor der Veröffentlichung und erkannte, dass es wahrscheinlich unmöglich war. Ich habe mich nur gefragt, ob jemand dieses Problem hatte/hat eine Art Workaround gefunden, auch wenn diese Umgehung unglaublich hacky ist. –

+2

Vielleicht ein Etikett mit einem Bild einer Schaltfläche mit der Farbe, die Sie möchten. Und ein zusätzliches Bild, wenn Sie auf die Schaltfläche klicken. –

+0

Wir haben uns gerade dafür entschieden, ein Hintergrundbild auf die Schaltfläche zu legen, die den Bereich zwischen der Schaltfläche und dem Rahmen der Schaltfläche farblich markiert. Alternativ hätten wir die SWT_AWT-Bridge und integrierte SWT-Buttons in die GUI einbauen können, aber das wäre zu kompliziert und hätte zu viel Zeit gekostet. Vielen Dank! –

4

Der Hintergrund einer Schaltfläche in Windows von außerhalb des SWT eingestellt ist.

Klicken Sie mit der rechten Maustaste auf Ihren Desktop, und klicken Sie auf Eigenschaften.

Wechseln Sie zur Registerkarte "Darstellung".

Klicken Sie auf "Erweitert".

Ich glaube, "3D-Objekte" bestimmt den Hintergrund der Schaltfläche. Dies wird durch das Thema jedes Benutzers bestimmt.

alt text

Eine große Sache über SWT ist es, die zugrunde liegenden System-Widgets und Themen verwendet. Eine frustrierende Sache über SWT ist die Verwendung der zugrunde liegenden System Widgets und Themen.

+0

Leider läuft dieses Programm unter Solaris und Windows und die Verhaltensweisen müssen so ähnlich wie möglich sein. –

+0

Eine frustrierend große Menge an Windows-Farben wird vom Systemthema gesteuert. Ich wünsche Ihnen viel Glück bei Ihrem Projekt. – Zoot

12

Auf Windows-Betriebssystemen funktioniert button.setBackGround nicht direkt. Ein kleines Code-Snippet kann helfen. Überschreiben Sie die Farbe Fall Taste wie unten dargestellt: -

----- obj Schaltfläche Name in folgenden Schnipsel ------------

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

Ich setze die Farbe für meine Readonly Combo übrigens auf Weiß.Aber wenn ich Hintergrund nicht als schwarze Farbe einstelle, bedecken das Rechteck vollständig die Kombination (Text kann nicht gesehen werden). Wie kann ich die Farbe für Combo einstellen, ohne die Hintergrundfarbe zu ändern? Vielen Dank –

1

Sie können eine Simulation Schaltfläche mit CLabel. Fügen Sie einen Maus-Listener hinzu, um den Hintergrund zu ändern, wenn Sie die Maus nach unten und oben bewegen, und im Mouse-Up-Ereignis ein Auswahl-Listener-Ereignis senden, so dass es sich wie eine Schaltfläche verhält. Zum Beispiel:

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); 
    } 
}); 

Diese kurz ändert den Hintergrund der Schaltfläche, während Sie die Maus drücken den Effekt Klicken auf eine Schaltfläche zu geben. CLabel kann im Gegensatz zu anderen SWT-Widgets auch erweitert werden, sodass Sie eine Unterklasse erstellen können, wenn Sie dies häufig tun müssen.