2010-02-12 32 views
7

Hiện tại, tôi đang sử dụng TreeCellRenderer tùy chỉnh để xử lý các thay đổi nhãn và biểu tượng cho JTree của tôi. Vấn đề xảy ra khi tôi cần thay đổi văn bản trên một vài nút. TreeCellRenderer hoạt động tốt ở chỗ văn bản mới được hiển thị. Tuy nhiên, chiều rộng từ văn bản ban đầu được lưu trữ và không được cập nhật. Tôi đã cố gắng để hack nó bằng cách ghi đè getPreferredSize trong TreeCellRenderer nhưng điều đó không hoạt động đúng kể từ khi tôi có chuỗi html. Tôi thậm chí đã thử phân tích các thẻ và nhận được chiều rộng, nhưng nó vẫn không hoàn hảo. Tôi đã sử dụng SwingUtilities và FontMetrics.Nhãn nút JTree thay đổi thường xuyên nhưng chiều rộng được lưu trữ

Dường như việc sử dụng sự hỗ trợ của cây DefaultTreeModel.nodeChanged (TreeNode) là cách thích hợp để thay đổi nút. Tuy nhiên, tôi sẽ cần phải có một cấu trúc dữ liệu bổ sung để xử lý việc truy cập các nút cần được thay đổi. Cá nhân tôi chỉ muốn thay đổi các nút cần thay đổi. Tuy nhiên, điều đó sẽ yêu cầu một cấu trúc dữ liệu khác để tìm tất cả các nút cần phải được cập nhật điều kinda. Cách tốt nhất xung quanh kích thước bộ nhớ đệm của JLabel sao lưu trong tình huống này là gì?

+0

Tôi đã có thể sửa lỗi này bằng JTree.setLargeModel (đúng) các tài liệu nói điều này sẽ vô hiệu hóa nhiều bộ nhớ đệm. Nhưng nó cũng cảnh báo không phải tất cả UI đều hỗ trợ nó. Tôi chỉ thử nó trong một số LnF cũng như trên Linux và Windows. Có vẻ ổn với tôi. Có suy nghĩ gì không? – initialZero

Trả lời

2

Tôi nhận thấy rằng việc sử dụng cách bạn đề xuất gọi nútChanged đã làm việc tốt nhất cho tôi.

Các vấn đề liên quan