J'ai configuré mon cadre avec un JTree sur la gauche et un JTable sur la droite, et j'ai utilisé un BorderLayout pour cela. Cependant, dès que je mets des données dans mon JTable, il s'étend pour couvrir presque toute la trame, et mon JTree avec elle. La table n'a actuellement aucune donnée (je vérifie mon SelectionListener), seulement quelques en-têtes de colonne qui totalisent quinze caractères. Il n'y a aucun moyen qu'il a besoin de l'espace supplémentaire.Problème avec JTable
Voici mon code de configuration:
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
);
Le problème avec GridLayout est que j'ai besoin que le JTree soit plus petit que le JTable - environ 25-33 à 75-66. Je veux dire, cela a effectivement résolu le problème, donc vous pouvez avoir la grosse tique verte. – Puppy
Hmm ... tous les composants vont-ils s'étendre pour remplir l'espace prévu? Pourriez-vous définir la taille maximale pour qu'elle soit plus petite que la taille de grille donnée et que cela reste ainsi? GridBagLayout peut être mieux adapté à cela, même si je ne l'ai jamais utilisé personnellement. –
Je suis retourné à BorderLayout, mais j'ai mis le JTable au centre. Maintenant ça joue bien. – Puppy