2012-06-05 15 views
5

Estoy tratando de construir un árbol SWT que tiene iconos en el nivel superior, pero no en el siguiente nivel.Eliminar SWT TreeItem imagen sangría

Tree Screenshot

¿Hay alguna manera de evitar el espacio en blanco que parece haber sido dejado por la imagen que no estoy usando? Traté de usar los siguientes fragmentos de código, pero ninguno hizo lo que yo quería.

SWT.MeasureItem:

tree.addListener(SWT.MeasureItem, new Listener() 
{ 
    @Override 
    public void handleEvent(Event event) 
    { 
    TreeItem item = (TreeItem)event.item; 
    Image image = item.getImage(); 
    if (image == null) 
    { 
     event.x -= 40; 
    } 
    } 
}); 

SWT.PaintItem:

tree.addListener(SWT.PaintItem, new Listener() 
{ 
    @Override 
    public void handleEvent(Event event) { 
    TreeItem item = (TreeItem)event.item; 
    Image image = item.getImage(); 
    if (image == null) 
    { 
     event.x -= 40; 
    } 
    } 
}); 

En ambos casos sólo estaba esperando que el texto podría ser dibujado un poco más a la izquierda.

Respuesta

1

He investigado un poco más. Según la respuesta de Eugene, esto parece ser un comportamiento nativo. Hay un par de cosas que vale la pena mencionar.

Si no hay elementos en el árbol que tengan un ícono, entonces no queda espacio para los iconos. Sin embargo, incluso un solo elemento con un icono hará que todos los elementos dejen espacio para los íconos.

Una solución hacky se puede implementar de la siguiente manera:

  • Use hay iconos para que el control natal no deja espacio icono
  • Para artículos donde se desea un icono prefijo algunos espacios para el texto, por ejemplo, "" + Texto
  • Añadir un oyente PaintItem que dibuja el icono que desea en el espacio dejado por el texto

Esto probablemente no funciona bien en todas las plataformas ya través de fuentes del sistema por lo que acaba de decidir vive con tener iconos.

2

Este comportamiento proviene de los controles nativos y es específico del sistema operativo (AFAIR, en Mac no verá este problema). Por desgracia, no es una solución fácil, pero agrega un ícono genérico (o no agregue íconos).