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?
Odpowiedz
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.
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. –
Czy użyłeś metody setRowHeight() JTree? Możesz ustawić wartość 0, aby każdy wiersz obliczał jego wysokość indywidualnie. – Subs