Tôi đã làm việc để chuyển đổi một ứng dụng Java từ WindowsLookAndFeel thành Nimbus, phần lớn thành công, mặc dù Nimbus foibles. Người dùng của tôi nói chung giống như Nimbus LaF nhưng không thích một số chi tiết, một số trong đó tôi đã thay đổi bằng cách tham khảo các câu hỏi trước trên trang web này. Ví dụ: Tôi đã sao chép LeafIcon, ClosedIcon và OpenIcon từ Windows LaF (mà họ thích) và sử dụng chúng trong phiên bản Nimbus, cho một sự kết hợp tuyệt vời của LaFs.thay đổi cách Nimbus LaF xử lý nút JTree làm nổi bật
Bị kẹt trên một sự cố (?) Cuối cùng.
Tôi có một JTree với một DefaultCellRenderer được phân lớp để tạo ra các nút hiển thị thích hợp. Điều này hoạt động tốt dưới WindowsLookAndFeel.
Sự cố: Trong WindowsLaF khi nút được chọn, văn bản của nút được tô sáng và hiệu ứng là dễ hiểu. Dưới Nimbus khi một nút được chọn làm nổi bật được thực hiện với một thanh (khá tối) màu chạy chiều rộng của cửa sổ cây (không chỉ là chiều rộng của văn bản), và hiệu quả là disconcerting.
Vì vậy: tôi chỉ đơn giản muốn điều trị WindowsLaF của nút JTree làm nổi bật trong Nimbus LaF (tức là nền màu chỉ có chiều rộng của văn bản, và tốt nhất là màu tốt hơn tôi có thể chọn). Tôi nghi ngờ điều này có nghĩa là tôi cần phải gán Painter đúng loại cho "Tree: TreeCell [Focused + Selected] .backgroundPainter", nhưng tôi không biết làm thế nào để viết nó.
Đề xuất được chào đón nhiều nhất.
EDIT
Xem nút nhấn chọn lạ với Java 7!
public class TreeBorder {
public static void main(String[] args) {
try{
for(UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch(Exception e) {
e.printStackTrace();
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(getJTree());
f.pack();
f.setVisible(true);
}
private JTree getJTree() {
JTree jTree = new JTree();
jTree.setCellRenderer(new LocalRenderer());
return jTree;
}
});
}
private static class LocalRenderer extends DefaultTreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasfocus) {
DefaultTreeCellRenderer result = (DefaultTreeCellRenderer)super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasfocus);
if(true) {
result.setFont(new JLabel().getFont());
Icon icon = UIManager.getIcon("FileView.floppyDriveIcon");
result.setIcon(icon);
}
return(result);
}
}
}
Phụ lục cho bài đăng của tôi: tất nhiên nếu có cách dễ dàng hơn họa sĩ, điều đó thậm chí còn tốt hơn. Đã cố gắng chỉ thay đổi Tree.selectionBackground thành màu ít mất tập trung hơn, nhưng Nimbus dường như bỏ qua sự sửa đổi. – user1359010
Thêm vào nhận xét của tôi. Bạn không thể đặt Tree.selectionBackground trực tiếp, nhưng màu này có nguồn gốc từ numbusSelectionBackground, vì vậy nimbUID.put ("nimbusSelectionBackground", mới ColorUIResource (205,208,216)); tạo ra một số hiệu ứng mong muốn (một Tree.selectionBackground nhẹ hơn). Vẫn nhận được một hàng được đánh dấu thay vì chỉ là văn bản, do đó, trợ giúp về một họa sĩ sẽ vẫn được đánh giá cao. – user1359010
@oliholz xin vui lòng bạn có thể bình luận tiền thưởng của bạn, chắc chắn tôi không bao giờ nhìn thấy câu hỏi này, bởi vì khái niệm Renderers cổ điển quá tải thuộc tính và cài đặt Nimbus trong hầu hết các trường hợp – mKorbel