2010-12-15 78 views
1

J'ai un JTree, et quand vous cliquez sur leafs, il change le modèle JTable et affiche une nouvelle table (un peu comme un système de messagerie). le problème se pose lorsque j'essaie de sélectionner les colonnes du nouveau modèle Table, cela donne toujours -1, quoi qu'il arrive. NOTE que cela fonctionne parfaitement pour le 1er modèle JTable, mais après la table modifiée,getSelectedColumn avec JTable ne fonctionne pas avec le changement de modèle

System.out.println(table.getSelectedColumn()); 

retourne toujours -1.

EDIT: bien, je ne sais pas quel extrait de code pour poster ici pour être honnête.

//constructor 
    public TreeSection() { 
    super(); 

    //TREE 
    top = new DefaultMutableTreeNode("EMAIL"); 
    createNodes(top); 
    //Create a tree that allows one selection at a time. 
    tree = new JTree(top); 
    tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); 
    //Listen for when the selection changes. 
    tree.addTreeSelectionListener(this); 

    //TABLE 
    tableModel = new MyTableModel(); 
    table = new JTable(tableModel); 
    table.setPreferredScrollableViewportSize(new Dimension(500, 70)); 
    table.setFillsViewportHeight(true); 
    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    selectionModel = table.getSelectionModel(); 
    selectionModel.addListSelectionListener(this); 


    //SCROLL PANE 
    treeView = new JScrollPane(tree); 
    tableView = new JScrollPane(table); 

    //SPLIT PANE 
    splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); 
    splitPane.setTopComponent(treeView); 
    splitPane.setBottomComponent(tableView); 
    splitPane.setDividerLocation(400); 
    splitPane.setPreferredSize(new Dimension(200, 700)); 

    //Add the split pane to this panel. 
    panel.add(splitPane,BorderLayout.WEST); 
} 

/** Required by TreeSelectionListener interface. */ 
public void valueChanged(TreeSelectionEvent e) { 
    DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); 

    if (node == null) return; 

    Object nodeInfo = node.getUserObject(); 

    if (node.isLeaf()) { 
     MailObject mObj = (MailObject)nodeInfo; 
     table.removeAll(); 
     tableModel.setTableData(mObj.tableD);//changes tree model 
     table = new JTable(tableModel); 

     panel.repaint(); 
    } 
} 

public void valueChanged(ListSelectionEvent event) { 
    // Get the data model for this table 
    //table.changeSelection(table.getSelectedColumn(), table.getSelectedRow(), false, false); 
    TableModel model = (TableModel)table.getModel(); 
    System.out.println(table.getSelectedColumn()); 
    } 

Répondre

1

getSelectedColumn renvoie -1 lorsqu'aucune colonne n'est sélectionnée. Si vous êtes sûr qu'une colonne est en cours de sélection, alors lorsque vous créez la nouvelle table, vous appelez getSelectedColumn sur l'ancienne table?

Modifier après extrait affiché: Vous créez une nouvelle JTable qui, non seulement ne pas les paramètres (tels que FillsViewPortHeight mais aussi ne pas le modèle de sélection Essayez de remplacer

table = new JTable(tableModel); 

dans. valueChanged avec

table.setModel(tableModel); 
+0

im appelant getSelectedColumn sur une variable JTable qui est continuellement mise à jour avec le modèle modifié lorsque le JTree le modifie. Personnellement, je pense que c'est un problème d'écoute. Même si ive jonglé avec l'auditeur, il n'y avait pas d'amélioration. –

+1

Mise à jour de la réponse après avoir regardé le code. – Jim

+0

merci un million! tu as résolu mon problème! presque perdu 3 heures sur ce. –

0

Lorsque vous modifiez le modèle de support, il remet à zéro les informations de sélection. Rappelez-vous, un nouveau modèle pourrait même avoir un nombre différent de colonnes, etc.

Ce que vous pouvez faire est enregistrer les informations de sélection avant de modifier le modèle, puis resélectionnez la colonne correcte une fois que le nouveau modèle est défini.

+0

okay, mais même si je ne sélectionne rien du tout jusqu'à APRES la table change, cela arrive encore. Dans ce cas, il n'y a pas eu de sélection initiale, mais le problème est toujours le même. –

+0

Donc, dites-vous que vous mettez à jour le modèle, puis sélectionnez une colonne, et vous obtenez toujours -1 comme colonne sélectionnée? Peut-être pourriez-vous poster un peu de code pour clarifier la situation ou énumérer les actions qui se déroulent actuellement? –

+0

allrite, j'ai posté un extrait .. im vraiment pas sûr de savoir comment gérer ce problème .. –