2012-06-05 8 views
5

Sto provando a creare un albero SWT con icone al livello superiore ma non al livello successivo.Rimuovi SWT TreeItem image indent

Tree Screenshot

C'è un modo per evitare lo spazio vuoto, che sembra essere stato lasciato per la statua che io non sto usando? Ho provato a utilizzare i seguenti frammenti di codice, ma nessuno dei due ha fatto ciò che volevo.

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

In entrambi i casi Speravo solo che il testo potrebbe essere disegnato un po 'più a sinistra.

risposta

1

Ho fatto altre indagini da solo. Come per la risposta di Eugenio, questo sembra essere un comportamento nativo. Ci sono un paio di cose che vale la pena notare.

Se nessun elemento nella Struttura ha un'icona, non rimane spazio per le icone. Tuttavia, anche un singolo oggetto con un'icona farà sì che tutti gli elementi lascino spazio alle icone.

Una soluzione hacky può essere implementato come segue:

  • Non impiegare le icone in modo che il controllo nativo non lascia spazio icona
  • Per le voci in cui si desidera un prefisso un'icona alcuni spazi al testo per esempio "" + Testo
  • Aggiungere un ascoltatore PaintItem che disegna l'icona desiderata nello spazio lasciato dal testo

Questo probabilmente non funziona bene tra le piattaforme e attraverso font di sistema in modo che ho appena deciso di vivi con le icone.

2

Questo comportamento deriva dai controlli nativi ed è specifico del sistema operativo (AFAIR, su Mac non vedrete questo problema). Ahimè, nessuna soluzione facile ma aggiungere qualche icona generica (o non aggiungere affatto icone).