代码之家  ›  专栏  ›  技术社区  ›  Puppy

jtable的快速问题

  •  1
  • Puppy  · 技术社区  · 14 年前

    我已经设置了我的框架,左边是jtree,右边是jtable,并使用borderlayout来完成这项工作。然而,一旦我在jtable中放入任何数据,它就会扩展到几乎覆盖整个框架,并用它覆盖我的jtree。表中目前根本没有数据(我正在验证我的SelectionListener),只有几个列标题,总共15个字符。它不可能需要额外的空间。

    这是我的设置代码:

        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
        );
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   cryptic_star    14 年前

    borderlayout非常挑剔。如果您知道只需要这两个项目,我建议您使用GridLayout—一行两列。不确定这是否有帮助,但我在网格布局方面总是取得了更大的成功。

    如果您坚持使用borderlayout,请尝试使用setmaximumsize(dimension)设置进入其中的对象(如jtable)的最大大小。