gpt4 book ai didi

java - 无论我使用哪种布局,JTree 都不会显示

转载 作者:行者123 更新时间:2023-12-01 08:08:17 24 4
gpt4 key购买 nike

我创建了 JTree 及其所有组件,然后在另一个类中将其添加到 JPanel 中。之后,我将 JPanel 添加到 JFrame 中;是的,我已经确保所有内容都设置为可见,面板在 setVisible() 之前添加到框架中,等等。

那么为什么我的带有 JTree 的滚动 Pane 没有显示出来呢?

    package TreeExample;

import java.awt.Color;

import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;

public class Tree extends JComponent
{
JTree tree;
JScrollPane scrollPane;
DefaultMutableTreeNode root = new DefaultMutableTreeNode("RootNode");

public Tree()
{
setVisible(true);
setSize(100, 300);
createChildNodes(root);
tree = new JTree(root);
tree.setVisible(true);
tree.setSize(100, 300);
scrollPane = new JScrollPane(tree);
scrollPane.add(tree);
scrollPane.setVisible(true);
scrollPane.setSize(100, 300);
scrollPane.setViewportView(this);
scrollPane.setBackground(Color.red);
}

private void createChildNodes(DefaultMutableTreeNode rootNode)
{
DefaultMutableTreeNode child1 = new DefaultMutableTreeNode("Child 1");
DefaultMutableTreeNode child2 = new DefaultMutableTreeNode("Child 2");
DefaultMutableTreeNode child3 = new DefaultMutableTreeNode("Child 3");

rootNode.add(child1);
rootNode.add(child2);
rootNode.add(child3);

DefaultMutableTreeNode grandchild1 = new DefaultMutableTreeNode(
"Grandchild 1");
DefaultMutableTreeNode grandchild2 = new DefaultMutableTreeNode(
"Grandchild 2");

child1.add(grandchild1);
child1.add(grandchild2);
}
}

这是我的面板...

    package TreeExample;

import java.awt.BorderLayout;
import java.awt.TextArea;

import javax.swing.JPanel;

public class Panel extends JPanel
{
Panel()
{
setLayout(new BorderLayout());
add(new Toolbar(), BorderLayout.NORTH);
add(new TextArea(), BorderLayout.CENTER);
add(new Tree(), BorderLayout.WEST);
}
}

这是我的框架。

package TreeExample;

import javax.swing.JFrame;

public class Frame extends JFrame
{
Frame()
{
setTitle("ToolBar Example");
add(new Panel());
pack();
setVisible(true);
setSize(500, 500);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args)
{
new Frame();
}
}

最佳答案

您的 Tree 类扩展了 JComponent。

您在类中创建了 JTree 和 JScrollPane,但没有将滚动 Pane 添加到组件中,因此您的 Tree 组件为空。

您需要为 Tree 类设置一个布局管理器,并向其中添加一些组件。

编辑:

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

上面的代码是错误的。首先,您创建一个以树为参数的滚动 Pane 。这是正确的,因为树已添加到滚动 Pane 的视口(viewport)中。

但是,然后您直接将树添加到滚动 Pane ,这是错误的,因为组件只能有一个父组件,因此树会从滚动 Pane 中删除。

注释掉如图所示的行,然后您应该能够使用 this.add(scrollpane);

关于java - 无论我使用哪种布局,JTree 都不会显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19625006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com