Reputation: 215
For some strange reason when I implement a JTree
in java I don't see the expansion lines (angled) on Mac OSX; but when the tree is expanded to show all the nodes, I see them on Windows. I have tried tree.putClientProperty("JTree.lineStyle", "Angled")
, but I get nothing.
A second question problem, on OSX again: I have a picture for the root, that also is not shown fully something is cut from the top and the bottom.
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;
}
}
Upvotes: 0
Views: 914
Reputation: 205875
Here is a complete example. Note that LEG_LINE_STYLE_STRING = "Angled"
is the default.
Addendum: Some additional getTreeCellRendererComponent()
examples are shown here; you may have to adjust 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();
}
});
}
}
Upvotes: 1