2010-08-13 5 views
1

왼쪽의 JTree와 오른쪽의 JTable로 프레임을 설정하고이를 수행하기 위해 BorderLayout을 사용했습니다. 그러나 JTable에 데이터를 저장하자마자 거의 모든 프레임과 JTree로 확장됩니다. 테이블에는 현재 (SelectionListener를 확인하고있는) 데이터가 전혀 없습니다. 총 15 개의 열 헤더 만 있습니다. 여분의 공간이 필요하지 않습니다.JTable의 빠른 문제

primaryframe = new javax.swing.JFrame(); 
    primaryframe.setTitle("Bus Route Finder"); 
    primaryframe.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); 
    primaryframe.setSize(500, 500); 
    primaryframe.setLayout(
     new java.awt.BorderLayout() 
    ); 

    // Set up the tree and it's dependent objects(model, scrollpane, etc). 
    javax.swing.tree.DefaultMutableTreeNode node = new javax.swing.tree.DefaultMutableTreeNode(dataroot.GetName()); 
    node.setUserObject(dataroot); 
    CreateNodes(dataroot, node); 
    primaryframe.add(
     treescrollpane = new javax.swing.JScrollPane(
      datatree = new javax.swing.JTree(
       treemodel = new javax.swing.tree.DefaultTreeModel(
        node 
       ) 
      ) 
     ), 
     java.awt.BorderLayout.WEST 
    ); 
    datatree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() { 
     public void valueChanged(javax.swing.event.TreeSelectionEvent e) { 
      javax.swing.JTree tree = (javax.swing.JTree)e.getSource(); 
      javax.swing.tree.DefaultMutableTreeNode newnode = (javax.swing.tree.DefaultMutableTreeNode)tree.getSelectionPath().getLastPathComponent(); 
      Controller.TreeData data = (Controller.TreeData)newnode.getUserObject(); 
      tablemodel.setNumRows(0); 
      tablemodel.setColumnCount(0); 
      for(int i = 0; i < data.GetNumberOfFields(); i++) { 
       tablemodel.addColumn(data.GetFieldName(i)); 
      } 
     } 
    }); 

    primaryframe.add(
     tablescrollpane = new javax.swing.JScrollPane(
      datatable = new JTable(
       tablemodel = new javax.swing.table.DefaultTableModel() 
      ) 
     ), 
     java.awt.BorderLayout.EAST 
    ); 

답변

2

BorderLayout를 몹시 몹시 신경을 쓰는 것입니다 :

여기 내 설정 코드입니다. GridLayout을 사용하는 것이 좋습니다. 두 항목 만 있으면됩니다. 한 열에 두 개의 열이 있어야합니다. 그게 도움이 될지 모르겠지만, 항상 GridLayout으로 훨씬 더 큰 성공을 거두었습니다.

BorderLayout을 사용하는 것이 단호한 경우에는 setMaximumSize (Dimension)를 사용하여 JTable과 같이 거기에 들어가는 객체의 최대 크기를 설정하십시오.

+0

GridLayout의 문제는 JTable- 약 25-33에서 75-66보다 작아야한다는 것입니다. 제 말은 실제로 문제가 실제로 해결되었으므로 큰 녹색 진드기를 가질 수 있다는 것입니다. – Puppy

+0

흠 ... 모든 구성 요소가 제공된 공간을 채우기 위해 확장됩니까? 최대 크기를 주어진 격자 크기보다 작게 설정하고 그대로 유지할 수 있습니까? GridBagLayout은 개인적으로 사용하지는 않았지만 더 적합 할 수 있습니다. –

+0

나는 BorderLayout으로 돌아 갔지만, JTable을 중앙에 놓았다. 이제는 훌륭하게 재생됩니다. – Puppy