部分可见的树节点在Java Swing中

huangapple 未分类评论43阅读模式
英文:

Partially visible TreeNodes in java swing

问题

我正在使用 java.swing 中的 JTree 制作一个目录查看器。GUI 的问题是节点部分可见,只有在展开子节点后才可见。

展开前

展开后

以下是上述代码:

public class ProjectStructure extends JPanel {
    private JTree directory;

    public ProjectStructure() {
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        Dimension size = getPreferredSize();
        size.width = 250;
        setPreferredSize(size);

        setBorder(BorderFactory.createTitledBorder("Explorer"));
    }

    void displayFilesInDirectory(File file) {
        DefaultMutableTreeNode root = new DefaultMutableTreeNode(file.getName());
        generateTreeView(file, root);

        directory = new JTree(root);
        directory.setVisible(true);
        add(directory);
    }

    private void generateTreeView(File rootFile, DefaultMutableTreeNode parent) {
        File[] files = rootFile.listFiles();

        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                DefaultMutableTreeNode node = new DefaultMutableTreeNode(files[i].getName());
                parent.add(node);
                if (files[i].isDirectory()) {
                    generateTreeView(files[i], node);
                }
            }
        }
    }
}

另外,我可以给 JPanel 添加可通过拖放调整大小的功能吗?

英文:

I am making a directory viewer with the help of JTree in java.swing The problem with the GUI is that the nodes are partially visible and are visible only after I exapand the child nodes

Before Expanding

After Expanding

Here is the code to the above

public class ProjectStructure extends JPanel{
private JTree directory;

public ProjectStructure() {
    setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
    Dimension size = getPreferredSize();
    size.width = 250;
    setPreferredSize(size);

    setBorder(BorderFactory.createTitledBorder(&quot;Explorer&quot;));
}

void displayFilesInDirectory(File file){
    DefaultMutableTreeNode root = new DefaultMutableTreeNode(file.getName());
    generateTreeView(file, root);

    directory = new JTree(root);
    directory.setVisible(true);
    add(directory);
}

private void generateTreeView(File rootFile, DefaultMutableTreeNode parent) {
    File[] files = rootFile.listFiles();

    if (files != null) {
        for (int i = 0; i &lt; files.length; i++) {
            DefaultMutableTreeNode node = new DefaultMutableTreeNode(files[i].getName());
            parent.add(node);
            if (files[i].isDirectory()) {
                generateTreeView(files[i], node);
            }
        }
    }
}
}

Also can I make the JPanel resizable with a drag and drop feature?

huangapple
  • 本文由 发表于 2020年4月5日 17:34:54
  • 转载请务必保留本文链接:https://java.coder-hub.com/61040595.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定