2016-03-11 47 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