Java getSelectedColumn与JTable不匹配';我无法适应不断变化的模式
我有一个JTree,当你点击leafs时,它会改变JTable模型并显示一个新表(很像电子邮件系统)。当我尝试选择新表模型的列时,问题就出现了,不管怎样,它总是给出-1。请注意,这对第一个JTable模型非常有效,但在更改表之后Java getSelectedColumn与JTable不匹配';我无法适应不断变化的模式,java,swing,jtable,jtree,Java,Swing,Jtable,Jtree,我有一个JTree,当你点击leafs时,它会改变JTable模型并显示一个新表(很像电子邮件系统)。当我尝试选择新表模型的列时,问题就出现了,不管怎样,它总是给出-1。请注意,这对第一个JTable模型非常有效,但在更改表之后 System.out.println(table.getSelectedColumn()); 总是返回-1 编辑:老实说,我不知道该在这里发布哪个代码段 //constructor public TreeSection() { super();
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());
}
当没有选择列时,getSelectedColumn返回-1。 如果您确定某个列被选中,那么在创建新表时,您是否在旧表上调用getSelectedColumn 发布代码段后编辑: 您正在创建一个新的JTable,它不仅没有设置(例如FillsViewPortHeight),而且没有选择模型。请尝试替换
table = new JTable(tableModel);
价值随
table.setModel(tableModel);
当没有选择列时,getSelectedColumn返回-1。 如果您确定某个列被选中,那么在创建新表时,您是否在旧表上调用getSelectedColumn 发布代码段后编辑: 您正在创建一个新的JTable,它不仅没有设置(例如FillsViewPortHeight),而且没有选择模型。请尝试替换
table = new JTable(tableModel);
价值随
table.setModel(tableModel);
当您更改支持模型时,它会重置选择信息。请记住,新模型甚至可能具有不同的列数,等等
您可以做的是在更改模型之前保存选择信息,然后在设置新模型后重新选择正确的列。更改支持模型时,它会重置选择信息。请记住,新模型甚至可能具有不同的列数等
您可以做的是在更改模型之前保存选择信息,然后在设置新模型后重新选择正确的列。我在一个JTable变量上调用getSelectedColumn,当JTree更改它时,该变量会随着更改后的模型不断更新。我个人觉得这是一个侦听器问题。即使我一直在胡闹对于监听器,没有任何改进。非常感谢!你解决了我的问题!在这方面几乎浪费了3个小时。我在一个JTable变量上调用getSelectedColumn,当JTree更改它时,该变量会随着更改的模型不断更新。我个人觉得这是一个监听器问题。即使我与监听器一起玩杂耍,也没有iM改进。非常感谢!你解决了我的问题!在这方面几乎浪费了3个小时。好的,但即使在表格更改之前我根本不选择任何内容,这种情况仍然会发生。因此,在这种情况下,根本没有初始选择,但仍然会出现相同的问题。那么你是说你更新模型,然后选择列,然后直到得到-1作为所选列?也许你可以发布一些代码来让情况更清楚,或者列出正在发生的实际操作?好的,但是即使我在表更改之前根本不选择任何内容,这种情况仍然会发生。因此,在这种情况下,根本没有初始选择,但仍然会出现相同的问题。因此你是说你更新了模型,然后选择了一列,然后仍然得到-1作为所选列吗?也许你可以发布一些代码来让情况更清楚,或者列出正在发生的实际操作?