Быстрая проблема с JTable - PullRequest
       35

Быстрая проблема с JTable

1 голос
/ 13 августа 2010

Я установил свой фрейм с JTree слева и JTable справа, и использовал BorderLayout для достижения этой цели.Однако, как только я помещаю какие-либо данные в мой JTable, он расширяется, чтобы охватить почти весь кадр, и мой JTree с ним.В настоящее время в таблице вообще нет данных (я проверяю свой SelectionListener), только пара заголовков столбцов, которые в общей сложности имеют пятнадцать символов.Там нет никакого способа, ему нужно дополнительное пространство.

Вот мой установочный код:

    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 Ответ

2 голосов
/ 13 августа 2010

BorderLayout ужасно привередливый. Я бы порекомендовал использовать GridLayout, если вы знаете, что хотите только два элемента - иметь одну строку с двумя столбцами. Не уверен, поможет ли это или нет, но у меня всегда был гораздо больший успех с GridLayout.

Если вы непреклонны в использовании BorderLayout, попробуйте установить максимальный размер объектов, таких как JTable, используя setMaximumSize (Dimension).

...