2014-12-30 28 views
0

這裏是我的問題完全可驗證的小例子,我相信和希望。 如果具有DefaultMutableTreeNode創建的JTree的直接從初始化()添加方法增加了我正確(線註釋的代碼)。但是如果我嘗試從ActionPerformed方法中操作按鈕,JTree不會出現。添加到JTree的JPanel的一個的actionPerformed

public class Window { 
private JFrame frame; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       Window window = new Window(); 
       window.frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the application. 
*/ 
public Window() { 
    initialize(); 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    frame = new JFrame(); 
    frame.setBounds(100, 100, 450, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JMenuBar menuBar = new JMenuBar(); 
    frame.getContentPane().add(menuBar, BorderLayout.NORTH); 

    JMenu mnAbrir = new JMenu("Open"); 
    menuBar.add(mnAbrir); 

    JMenuItem mntmAbrirXml = new JMenuItem("Open JTree"); 
    mntmAbrirXml.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      DefaultMutableTreeNode mutable = new DefaultMutableTreeNode(); 
      JTree tree = new JTree(mutable); 
      JPanel panel = new JPanel(); 
      panel.setLayout(new BorderLayout()); 
      panel.add(tree); 
      frame.getContentPane().add(panel, BorderLayout.CENTER); 
      //System.out.println("Is into ActionPerformed"); 

     } 
    }); 
    mnAbrir.add(mntmAbrirXml); 
    //JTree treeOut = new JTree(new DefaultMutableTreeNode()); 
    //frame.getContentPane().add(treeOut, BorderLayout.CENTER); 
} 

} 

再次感謝Topo。

+2

考慮提供這說明您的問題 – MadProgrammer

+3

您_could_'重新驗證()'封閉容器和'重繪()'一個可運行的例子,但'樹.setModel(abrirXmlTree())似乎更可取。 – trashgod

+0

添加缺少的代碼 – Topo

回答

0

真的不知道爲什麼,但裏面的主框架的actionPerformed必須是可見的。這是代碼行丟失(在的actionPerformed):

frame.setVisible(true); 
相關問題