出于某种奇怪的原因,当我在java中实现JTree时,我在Mac OSX上看不到扩展线(有角度的);但是当树展开以显示所有节点时,我可以在Windows上看到它们。我尝试过tree.putClientProperty("JTree.lineStyle", "Angled"),但什么也没有得到。
第二个问题,同样是在OSX上:我有一张关于根的图片,也没有完全显示从顶部和底部切割的东西。
DefaultMutableTreeNode root = new DefaultMutableTreeNode(userId + " Album List");
albTree = new JTree(root);
albTree.setCellRenderer(new IconRenderer());
albTree.putClientProperty("JTree.lineStyle", "Angled");
albTree.setFont(new Font("Segoe UI", Font.PLAIN, 20));
albTreeModel = (DefaultTreeModel) albTree.getModel(); albTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
class IconRenderer extends DefaultTreeCellRenderer {
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
// start with default behavior
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
// customize based on local conditions/state
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
Icon openIcon = renderer.getDefaultOpenIcon();
Icon rootIcon = new ImageIcon("images/user-1.png");
if (node == nonAdminFrame.root) {
setIcon(rootIcon);
}
else if (nonAdminFrame.root.isNodeChild(node)) {
setIcon(openIcon);
}
return this;
}
}发布于 2013-04-06 18:42:32
下面是一个完整的示例。请注意,LEG_LINE_STYLE_STRING = "Angled"是默认设置。
附录:here中显示了一些额外的getTreeCellRendererComponent()示例;您可能需要调整setRowHeight()。

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.UIManager;
/**
* @see
*/
public class Test {
private void display() {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTree tree = new JTree();
tree.putClientProperty("JTree.lineStyle", "Angled");
//tree.putClientProperty("JTree.lineStyle", "Horizontal");
//tree.putClientProperty("JTree.lineStyle", "None");
for (int i = 0; i < tree.getRowCount(); i++) {
tree.expandRow(i);
}
f.add(tree);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Test().display();
}
});
}
}https://stackoverflow.com/questions/15817128
复制相似问题