getSelectedColumn с JTable не работает с изменением модели - PullRequest
1 голос
/ 15 декабря 2010

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

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

всегда возвращает -1.

РЕДАКТИРОВАТЬ: ну, я не знаю, какой фрагмент кода разместить здесьЕсли честно.

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

Ответы [ 2 ]

1 голос
/ 15 декабря 2010

getSelectedColumn возвращает -1, если столбец не выбран. Если вы уверены, что столбец выбран, то, возможно, при создании новой таблицы вы вызываете getSelectedColumn для старой таблицы?

Изменить после публикации фрагмента: Вы создаете новую таблицу JTable, которая не только не имеет настроек (например, FillsViewPortHeight, но и не имеет модели выбора. Попробуйте заменить

table = new JTable(tableModel);

в значении, с

table.setModel(tableModel);
0 голосов
/ 15 декабря 2010

Когда вы меняете модель поддержки, она сбрасывает информацию о выборе. Помните, что в новой модели может быть даже другое количество столбцов и т. Д.

Что вы можете сделать, это сохранить информацию о выборе перед сменой модели, а затем повторно выбрать правильный столбец после установки новой модели.

...