2010-12-15 6 views
1

Ich habe ein JTree, und wenn Sie auf Blätter klicken, ändert es das JTable-Modell und zeigt eine neue Tabelle an (ähnlich einem E-Mail-System). Das Problem tritt auf, wenn ich versuche, die Spalten des neuen Tabellenmodells zu wählen, es gibt immer -1, egal was. Beachten Sie, dass dies perfekt für das 1. JTable-Modell funktioniert, aber nach der geänderten TabelleGetSelectedColumn mit JTable funktioniert nicht mit wechselndem Modell

immer -1 zurückgibt.

EDIT: Nun, ich weiß nicht, welche Code-Schnipsel hier um ehrlich zu sein.

//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()); 
    } 

Antwort

1

getSelectedColumn gibt -1 zurück, wenn keine Spalte ausgewählt ist. Wenn Sie sicher sind, dass eine Spalte ausgewählt ist, dann rufen Sie vielleicht beim Erstellen der neuen Tabelle getSelectedColumn in der alten Tabelle auf?

bearbeiten nach Schnipsel gepostet: Sie einen neuen JTable zu schaffen, die nicht nur die Einstellungen nicht hat (wie FillsViewPortHeight aber auch nicht das Auswahlmodell hat Versuchen Sie ersetzen

table = new JTable(tableModel); 

in. Value mit

table.setModel(tableModel); 
+0

im Aufruf von getSelectedColumn auf einer JTable-Variable, die ständig mit dem geänderten Modell aktualisiert wird, wenn JTree es ändert. Ich persönlich fühle, dass es ein Hörerproblem ist. selbst als ich mit dem Zuhörer herumjongelte, gab es keine Besserung. –

+1

Aktualisiert die Antwort nach dem Blick auf den Code. – Jim

+0

danke eine million! Du hast mein Problem gelöst! fast 3 Stunden damit verschwendet. –

0

Wenn Sie das Trägermodell ändern, es setzt die Auswahlinformationen. Denken Sie daran, könnte ein neues Modell eine unterschiedliche Anzahl von Spalten haben sogar usw.

Sie können die Auswahlinformationen speichern, bevor Sie das Modell ändern, und dann die richtige Spalte erneut auswählen, sobald das neue Modell festgelegt wurde.

+0

okay, aber selbst wenn ich überhaupt nichts auswähle, bis die Tabelle sich ändert, passiert das immer noch. In diesem Fall gab es also überhaupt keine erste Auswahl, aber immer noch das gleiche Problem. –

+0

Also sagen Sie, dass Sie das Modell aktualisieren, dann eine Spalte auswählen und dann immer noch -1 als die ausgewählte Spalte erhalten? Vielleicht könnten Sie etwas Code posten, um die Situation klarer zu machen oder die tatsächlichen Aktionen aufzulisten? –

+0

allrite, ich habe ein Snippet geschrieben .. ich bin mir wirklich nicht sicher, wie ich mit diesem Problem umgehen soll .. –