1

最初の を作成しようとしていますJTreeが、ノードをツリーに追加しようとすると、変更が反映されず、表示されるのはいくつかのデフォルト ノード (色、スポーツ、食べ物) を持つツリーだけです。

ツリーが存在するメイン パネル コード:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
public class Scenario1Panel extends JPanel
{

/**
 * 
 */
private static final long serialVersionUID = 1L;

public Scenario1Tree scenario1Tree;

public Scenario1Panel()
{
    scenario1Tree = new Scenario1Tree();
    add(scenario1Tree);
}
public static void main(String args[]) 
{
    try
    {
        String lookAndFeel = UIManager.getSystemLookAndFeelClassName();
        System.out.println(lookAndFeel);
        UIManager.setLookAndFeel(lookAndFeel);
    }
    catch(Exception e)
    {
        System.out.println("couldn't get that LookAndFeel");
    }

    Scenario1Panel mgr = new Scenario1Panel();

    JFrame frame = new JFrame();

    frame.add(mgr);
    frame.pack();
    frame.setVisible(true);

}

}

私のツリーコードは次のとおりです。

import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeSelectionModel;
public class Scenario1Tree extends JTree
{
/**
 * 
 */
private static final long serialVersionUID = 1L;

private JTree tree;

public Scenario1Tree()
{
    DefaultMutableTreeNode top = new DefaultMutableTreeNode("Scenario1");
    createNodes(top);
    tree = new JTree(top);

    //Create a tree that allows one selection at a time.
    tree.getSelectionModel().setSelectionMode
        (TreeSelectionModel.SINGLE_TREE_SELECTION);

    //Create the scroll pane and add the tree to it. 
    JScrollPane treeView = new JScrollPane(tree);


}

private void createNodes(DefaultMutableTreeNode top) {
    DefaultMutableTreeNode loginUser1 = null;
    DefaultMutableTreeNode addNewUsers = null;
    DefaultMutableTreeNode addNewUsersBreakout = null;

    loginUser1 = new DefaultMutableTreeNode("Login User 1");
    top.add(logintUser1);

    addNewUsers = new DefaultMutableTreeNode("Add New Users");
    top.add(addNewUsers);

    addNewUsersBreakout = new DefaultMutableTreeNode("Add User2");
    addNewUsers.add(addNewUsersBreakout );
    addNewUsersBreakout = new DefaultMutableTreeNode("Add User3");
    addNewUsers.add(addNewUsersBreakout );
    addNewUsersBreakout = new DefaultMutableTreeNode("Add User4");
    addNewUsers.add(addNewUsersBreakout );
    addNewUsersBreakout = new DefaultMutableTreeNode("Add User5");
    addNewUsers.add(addNewUsersBreakout );

}

public static void main(String args[]) 
{
    try
    {
        String lookAndFeel = UIManager.getSystemLookAndFeelClassName();
        System.out.println(lookAndFeel);
        UIManager.setLookAndFeel(lookAndFeel);
    }
    catch(Exception e)
    {
        System.out.println("couldn't get that LookAndFeel");
    }

    Scenario1Tree tree = new Scenario1Tree();

    JFrame frame = new JFrame();

    frame.add(tree);
    frame.pack();
    frame.setVisible(true);

}

}

誰かが私が間違っていることを説明してもらえますか?

4

2 に答える 2

6

1 つの JTree を作成しすぎています。すべてのノードを JTree 変数に追加していますが、表示されたツリーには JTree 拡張クラスを使用していますが、後者にはノードが追加されていません。

クラスで JTree を拡張するのではなく、メソッドを指定してgetTree()、必要なときに必要な場所で JTree を返すようにすることをお勧めします。

つまり、

// get rid of extends JTree
public class Scenario1Tree // extends JTree
{
private static final long serialVersionUID = 1L;

private JTree tree;

public Scenario1Tree()
{
    DefaultMutableTreeNode top = new DefaultMutableTreeNode("Scenario1");
    createNodes(top);
    tree = new JTree(top);

    tree.getSelectionModel().setSelectionMode
        (TreeSelectionModel.SINGLE_TREE_SELECTION);

    // JScrollPane treeView = new JScrollPane(tree);

}

public JTree getTree() {
  return tree;
}
于 2013-01-09T18:05:52.487 に答える
5

インスタンス作成呼び出しのScenario1Tree代わりにJTree

setModel(new DefaultTreeModel(top));

JTree実際、インスタンスはまったく必要ありません。

于 2013-01-09T18:05:41.963 に答える