Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Как скрыть корневой (root) узел в дереве?


Автор: ShkVal 15.3.2005, 10:55
Подскажите каким образом скрыть корневой узел (нулевой уровень)? Т. е. нужно сделать так, чтобы он не отображался.
Когда делаю setRootVisible(false) все элементы становятся невидимыми.

Автор: Domestic Cat 15.3.2005, 11:29
А когда ты так скрываешь рут, он expanded?

Автор: ShkVal 15.3.2005, 11:46
Domestic Cat, он вообще ещё пустой. Задача в том что элементы в дерево добавляются после каких-то манипуляций пользователя и при первоначальном отображении JTree рут уже д. б. невидимым, т. е. дерево должно быть как бы пустым. А потом пользователь заполняет его.

Автор: DarkDS 16.3.2005, 00:00
Когда добавляешь в невидимый рут - ничего не увидишь, так как он закрыт. Нужно либо его раскрыть либо вызвать метод scrollPathToVisible у дерева ...

к примеру вот так:
Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;

public class JDynamicTreePanel extends JPanel {
    private int newNodeSuffix = 1;

    private DefaultMutableTreeNode rootNode;
    private DefaultTreeModel treeModel;
    private JTree tree;

    public JDynamicTreePanel() {
        super(new BorderLayout());
        JPanel treePanel = new JPanel(new GridLayout(1,0));

        rootNode = new DefaultMutableTreeNode("Root Node");
        treeModel = new DefaultTreeModel(rootNode);
        tree = new JTree(treeModel);
        tree.setRootVisible( false );

        JScrollPane scrollPane = new JScrollPane(tree);
        treePanel.add(scrollPane);

        JButton addButton = new JButton("Add");
        addButton.addActionListener( new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String newChildName = "New Node " + newNodeSuffix++;
                DefaultMutableTreeNode parentNode = null;
                TreePath parentPath = tree.getSelectionPath();

                if (parentPath == null) {
                    parentNode = rootNode;
                } else {
                    parentNode = (DefaultMutableTreeNode)(parentPath.getLastPathComponent());
                }

                DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(newChildName);
                treeModel.insertNodeInto(childNode, parentNode, parentNode.getChildCount());
                tree.scrollPathToVisible(new TreePath(childNode.getPath()));
            }
        });

        treePanel.setPreferredSize(new Dimension(300, 150));
        add(treePanel, BorderLayout.CENTER);

        JPanel panel = new JPanel(new GridLayout(0,1));
        panel.add(addButton);
        add(panel, BorderLayout.LINE_END);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("DynamicTreeDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JDynamicTreePanel newContentPane = new JDynamicTreePanel();
        newContentPane.setOpaque(true);
        frame.setContentPane(newContentPane);
        frame.pack();
        frame.show();
    }
}

Автор: ShkVal 17.3.2005, 12:39
DarkDS, спасибо, это мне очень помогло smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)