2016-03-11 29 views
0

如何在另一个jframe中动态地(从textField)节点添加到jtree? 这里是我的一点代码:将节点从另一个jframe添加到jtree

final First_JFRame frame= new First_JFRame(); 
DefaultTreeModel model = (DefaultTreeModel) frame.tree.getModel(); 
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot(); 
      DefaultMutableTreeNode firstNode = new DefaultMutableTreeNode("firstNode") ; 
      root.add(firstNode); 
    firstNode.add(new DefaultMutableTreeNode("firstleaf")); 
    firstNode.add(new DefaultMutableTreeNode("secondleaf")); 
    model.reload(root); 

知道jtree声明为公共静态

+1

该问题的哪一部分是你实际上遇到的问题?将节点添加到'JTree'?将信息从一个班级传递给另一个班级?知道用户何时需要添加什么? – MadProgrammer

+0

我实际上试图将frame2中我的文本字段中的值作为一个节点添加到frame1中的jtree,但它不起作用,但它在同一个jframe中起作用 –

+0

*“.. from another jframe”* 1)请参见[使用多个JFrames,好/坏实践?](http://stackoverflow.com/q/9554636/418556)2)为了更好的帮助更快,张贴[MCVE]或[短,自包含,正确的例子](http: //www.sscce.org/)。 –

回答

1

这里是如何获得所需的动作一个简单的例子。 基本上你只需要将你的Jtree实例传递给第二帧,然后再向它添加节点。

public static void main(String[] args) { 

     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       JFrame frame1 = new JFrame(); 
       frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame1.setLocationRelativeTo(null); 


       JTree tree = new JTree(); 
       DefaultTreeModel model = (DefaultTreeModel) tree.getModel(); 
       DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot(); 
       DefaultMutableTreeNode firstNode = new DefaultMutableTreeNode("firstNode") ; 
       root.add(firstNode); 
       firstNode.add(new DefaultMutableTreeNode("firstleaf")); 
       firstNode.add(new DefaultMutableTreeNode("secondleaf")); 
       model.reload(); 
       frame1.add(tree); 
       frame1.pack(); 
       frame1.setVisible(true); 

       JFrame frame2 = new JFrame(); 
       frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame2.setLocationRelativeTo(frame1); 
       JTextField text = new JTextField(15); 
       JButton add = new JButton("ADD"); 
       frame2.setLayout(new FlowLayout()); 
       frame2.add(text); 
       frame2.add(add); 
       frame2.pack(); 
       frame2.setVisible(true); 

       add.addActionListener(new ActionListener() { 

        @Override 
        public void actionPerformed(ActionEvent e) { 
         firstNode.add(new DefaultMutableTreeNode(text.getText())); 
         model.reload(); 
        } 
       }); 
      } 
     }); 

    } 
+2

或者,使用观察者模式,以便可以解耦代码 – MadProgrammer