Java JTable的快速问题

Java JTable的快速问题,java,jtable,jtree,Java,Jtable,Jtree,我已经用一个JTree在左边,一个JTable在右边设置了我的框架,并使用了一个BorderLayout来完成这项工作。然而,一旦我将任何数据放入JTable,它就会扩展到几乎覆盖整个帧,并覆盖JTree。该表目前根本没有数据(我正在验证SelectionListener),只有几个总共15个字符的列标题。它不可能需要额外的空间 这是我的设置代码: primaryframe = new javax.swing.JFrame(); primaryframe.setTitle("Bu

我已经用一个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
    );
primaryframe=newjavax.swing.JFrame();
primaryframe.setTitle(“公交路线查找器”);
setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
primaryframe.setSize(500500);
primaryframe.setLayout(
新建java.awt.BorderLayout()
);
//设置树及其从属对象(模型、滚动窗格等)。
javax.swing.tree.DefaultMutableTreeNode=new javax.swing.tree.DefaultMutableTreeNode(dataroot.GetName());
node.setUserObject(dataroot);
CreateNodes(dataroot,node);
primaryframe.add(
treescrollpane=newjavax.swing.JScrollPane(
datatree=newjavax.swing.JTree(
treemodel=newjavax.swing.tree.DefaultTreeModel(
节点
)
)
),
java.awt.BorderLayout.WEST
);
datatree.addTreeSelectionListener(新的javax.swing.event.TreeSelectionListener(){
public void valueChanged(javax.swing.event.TreeSelectionEvent e){
javax.swing.JTree=(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);
对于(int i=0;i
边框布局非常挑剔。如果您知道只需要这两个项目,我建议您使用GridLayout—一行两列。我不确定这是否有帮助,但我在GridLayout方面一直取得了更大的成功


如果您坚持使用BorderLayout,请尝试使用setMaximumSize(Dimension)设置进入其中的对象(如JTable)的最大大小。

GridLayout的问题是我需要JTree小于JTable-大约25-33到75-66。我的意思是,它确实解决了手头的问题,所以你可以有一个大的绿色勾号。嗯……所有组件都会扩展以填充提供的空间吗?您可以将最大大小设置为小于给定的网格大小,并保持这种状态吗?GridBagLayout可能更适合这种情况,尽管我从未亲自使用过它。我回到了BorderLayout,但将JTable放在了中间。现在它演奏得很好。