JTree とそのすべてのコンポーネントを作成し、別のクラスでそれを JPanel に追加します。その後、JPanel を JFrame に追加します。はい、すべてが表示されるように設定されていること、パネルが setVisible() の前にフレームに追加されることなどを確認しました。
では、JTree が表示されたスクロールペインが表示されないのはなぜですか?
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();
}
}