2012-05-18 15 views
5

È possibile aggiungere dello spazio vuoto tra le righe del nodo in un JTree? Sto usando immagini personalizzate per le icone dei nodi e immagino che le immagini siano più grandi delle icone dei nodi standard, quindi le icone dei nodi sono molto vicine tra loro. Sarebbe più bello se ci fosse un po 'di separazione.Aggiunta di padding/spazio verticale tra le righe in un JTree?

+5

Hai utilizzato il metodo setRowHeight() di JTree? Puoi impostarlo su 0 per fare in modo che ciascuna riga calcoli la sua altezza individualmente. – Subs

risposta

3

Per aggiungere una distanza effettivo tra nodi dell'albero si dovrà modificare l'interfaccia utente e restituire un adeguato successore AbstractLayoutCache (per default JTree utilizza due classi, a seconda del valore di altezza di riga: FixedHeightLayoutCache o VariableHeightLayoutCache).

Il modo più semplice per aggiungere qualche spaziatura tra i nodi è modificare rendering, quindi avrà qualche supplementare del bordo, ad esempio:

public static void main (String[] args) 
{ 
    JFrame frame = new JFrame(); 

    JTree tree = new JTree(); 
    tree.setCellRenderer (new DefaultTreeCellRenderer() 
    { 
     private Border border = BorderFactory.createEmptyBorder (4, 4, 4, 4); 

     public Component getTreeCellRendererComponent (JTree tree, Object value, boolean sel, 
                 boolean expanded, boolean leaf, int row, 
                 boolean hasFocus) 
     { 
      JLabel label = (JLabel) super 
        .getTreeCellRendererComponent (tree, value, sel, expanded, leaf, row, 
          hasFocus); 
      label.setBorder (border); 
      return label; 
     } 
    }); 
    frame.add (tree); 

    frame.pack(); 
    frame.setLocationRelativeTo (null); 
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
    frame.setVisible (true); 
} 

Questo è ancora un po 'più difficile che semplicemente modificando l'altezza della riga statico (come Subs offerto in commento), MA è meglio a causa di diverse dimensioni e stili di font possibili su vari SO. Quindi non avrai problemi di dimensioni ovunque.

A proposito, è anche possibile modificare la rappresentazione della selezione del nodo nel modo desiderato, in questo modo è anche possibile simulare visivamente la spaziatura.

+1

Sì, questo è quello che ho finito (insieme all'impostazione dell'altezza della riga di JTree su 0 in modo tale da rimandare il calcolo dell'altezza al renderer di celle). Funziona abbastanza bene. –

Problemi correlati