2011-01-20 16 views
5

La clase Botón SWT tiene un método setForeground(Color) pero parece no tener ningún efecto (el método está realmente en la superclase de Button). El javadoc dice que este método es una pista y puede ser anulado por la plataforma. Mi plataforma es Windows.¿Cómo configurar el botón SWT de color de primer plano?

  • ¿Esto significa que no es posible establecer el color del primer plano del botón en Windows?
  • ¿Funciona en otras plataformas?
  • ¿Hay una solución?

Respuesta

5

En Windows, setForeground para Buttons no tiene efectos.

Como solución alternativa, agregue PaintListener a su Button. En el método paintControl de este Oyente, obtenga el evento generado GC y, con él, vuelva a escribir el texto de su Button usando el color que desee.

Puede, de hecho, dibujar cualquier cosa sobre su Button.

+1

Gracias Mario . Tomó un poco de toquetear para corregir el posicionamiento, pero su consejo hizo el trabajo. –

+0

@Kevin Stembridge Soy nuevo en SWT GC, ¿me pueden ayudar con la forma correcta de posicionarme? Parece complicado porque el texto se puede alinear de manera diferente. ¡Gracias! – RAY

+0

El posicionamiento se puede realizar mediante el método getSize() del botón y el método stringExtent() de GC. Para que pueda obtener el tamaño del botón y el tamaño del texto. – Alex

0

En windows, setForeground tampoco funciona para Group.

Si puede convencer a sus usuarios de utilizar el tema clásico, setForeground funcionará milagrosamente.

2

Si necesita el Botón con estilo SWT.CHECK puede intentar usar el Botón sin texto y agregar el elemento Etiqueta. Ejemplo:

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

Este es el código para implementar Color de primer plano en Botones en SWT con permitir clave mnemotécnico que se deben mostrar también, y se activaron al presionar Alt + "mnemotécnico clave";

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 es mi propio método para convertir hexagonal Código de color de Tipo Color

Nota: Aquí ALT + C es la combinación Tecla mnemónica he utilizado

Cuestiones relacionadas