首页
学习
活动
专区
圈层
工具
发布

JTree实现
EN

Stack Overflow用户
提问于 2013-04-05 00:51:14
回答 1查看 831关注 0票数 0

出于某种奇怪的原因,当我在java中实现JTree时,我在Mac OSX上看不到扩展线(有角度的);但是当树展开以显示所有节点时,我可以在Windows上看到它们。我尝试过tree.putClientProperty("JTree.lineStyle", "Angled"),但什么也没有得到。

第二个问题,同样是在OSX上:我有一张关于根的图片,也没有完全显示从顶部和底部切割的东西。

代码语言:javascript
复制
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;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2013-04-06 18:42:32

下面是一个完整的示例。请注意,LEG_LINE_STYLE_STRING = "Angled"是默认设置。

附录:here中显示了一些额外的getTreeCellRendererComponent()示例;您可能需要调整setRowHeight()

代码语言:javascript
复制
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();
            }
        });
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15817128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档