2014-12-30 2 views
0

여기에 내 문제의 완전한 검증 가능한 최소 예가 나와 있습니다. initialize() 메소드에서 직접 추가 한 DefaultMutableTreeNode로 작성된 JTree가 나를 올바르게 추가하는 경우 (라인 주석이있는 코드). 하지만 ActionPerformed 메서드에서 단추를 조작하려고하면 JTree가 나타나지 않습니다.ActionPerformed에서 JPanel에 JTree 추가

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); 
} 

} 

다시 한번 감사드립니다.

+2

당신은'() 재 검증'바깥 쪽 용기와'다시 그리기를()'_could_ 문제 – MadProgrammer

+3

을 보여줍니다 실행 가능한 예제를 제공하는 것을 고려 있지만,이 코드의 라인 (의 actionPerformed 이내)없는 것입니다 .setModel (abrirXmlTree())'가 바람직합니다. – trashgod

+0

누락 된 코드가 추가됨 – Topo

답변

0

이유를 모르겠지만 메인 프레임 안의 ActionPerformed를 볼 수 있어야합니다. `트리

frame.setVisible(true);