2012-05-18 13 views
5

Czy jest możliwe dodanie pustej przestrzeni między wierszami węzłów w JTree? Używam niestandardowych obrazów dla ikon węzła i domyślam się, że obrazy są większe niż standardowe ikony węzłów, więc ikony węzłów znajdują się bardzo blisko siebie. Byłoby ładniej, gdyby było trochę rozstania.Dodawanie pionowej padding/spacji między wierszami w JTree?

+5

Czy użyłeś metody setRowHeight() JTree? Możesz ustawić wartość 0, aby każdy wiersz obliczał jego wysokość indywidualnie. – Subs

Odpowiedz

3

Aby dodać odstępy rzeczywisty między węzłami drzewa trzeba będzie zmodyfikować interfejs użytkownika i powrócić do właściwego następcy AbstractLayoutCache (domyślnie JTree wykorzystuje dwie klasy, w zależności od wartości wysokości rzędu: FixedHeightLayoutCache lub VariableHeightLayoutCache).

Najprostszym sposobem, aby dodać odstępy między węzłami jest modyfikacja renderujący, więc będzie mieć jakąś dodatkową granicę, na przykład:

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

To wciąż nieco trudniejsze niż po prostu ustawienie wysokości wiersza statyczne (jak Subskrybent zaoferował ci w komentarzu), ALE jest to lepsze ze względu na różne możliwe rozmiary i style czcionek w różnych systemach operacyjnych. Więc nie będziesz mieć problemów z wielkością w dowolnym miejscu.

Nawiasem mówiąc, możesz również zmienić reprezentację zaznaczenia węzła tak, jak lubisz, dzięki czemu możesz wizualnie nawet sfałszować odstępy.

+1

Tak, właśnie to zrobiłem (wraz z ustawieniem wysokości wiersza JTree na 0 tak, że odrzuca obliczenie wysokości do renderera komórek). Działa całkiem dobrze. –

Powiązane problemy