Có thể thêm một số khoảng trống giữa các hàng nút trong một JTree không? Tôi đang sử dụng hình ảnh tùy chỉnh cho các biểu tượng nút và tôi đoán hình ảnh lớn hơn các biểu tượng nút tiêu chuẩn, do đó các biểu tượng nút nằm rất gần nhau. Nó sẽ đẹp hơn nếu có một chút tách biệt.Thêm đệm/khoảng trống dọc giữa các hàng trong một JTree?
Trả lời
Để thêm một khoảng cách thực tế giữa các nút cây bạn sẽ phải thay đổi giao diện người dùng và trả về một AbstractLayoutCache kế thích hợp (theo mặc định JTree sử dụng hai lớp, tùy thuộc vào giá trị chiều cao hàng: FixedHeightLayoutCache hoặc VariableHeightLayoutCache).
Cách dễ nhất để thêm một số khoảng cách giữa các nút là để sửa đổi renderer, vì vậy nó sẽ có một số biên giới bổ sung, ví dụ:
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);
}
này vẫn còn một chút khó khăn hơn hơn là chỉ thiết lập chiều cao hàng tĩnh (như Subs cung cấp cho bạn trong bình luận), NHƯNG nó là tốt hơn do kích cỡ phông chữ khác nhau và phong cách trên hệ điều hành khác nhau. Vì vậy, bạn sẽ không gặp vấn đề về kích thước ở bất cứ đâu.
Nhân tiện, bạn cũng có thể thay đổi cách trình bày lựa chọn nút theo cách bạn muốn, theo cách đó bạn thậm chí có thể giả mạo khoảng cách một cách trực quan.
Vâng, đây là những gì tôi đã kết thúc (cùng với việc thiết lập chiều cao hàng của JTree thành 0 để nó làm giảm tính toán chiều cao cho trình kết xuất ô). Hoạt động khá tốt. –
Bạn đã sử dụng phương thức setRowHeight() của JTree chưa? Bạn có thể đặt nó thành 0 để làm cho mỗi hàng tính toán chiều cao của nó một cách riêng biệt. – Subs