gpt4 book ai didi

java - JTable,TableColumnModelListener 检测选定的行

转载 作者:行者123 更新时间:2023-11-29 05:41:47 26 4
gpt4 key购买 nike

我想要完成的是:如果用户将焦点放在我的 JTable 中一行的第 5 列(通过单击它或按 Tab 直到他到达第 5 个单元格),我会显示一个对话框。对话的结果将被放入该单元格中。要访问该单元格,我需要知道焦点所在的行和列。

我现在面临的问题是,如果我单击单元格,在聚焦表格中的任何其他内容之前,getSelectedRow() 返回 -1,而 getSelectedColumn() 返回正确的列。

问题:如何在第一次单击表格时确定所选行。或者是我做一个大的解决方法来单独处理第一次点击的唯一选择。

new TableColumnModelListener() {
.
.
.
@Override
public void columnSelectionChanged(ListSelectionEvent e) {
System.out.println(getSelectedColumn()); // this is correct
System.out.println(getSelectedRow()); // -1 on first click in JTable
}
}

最佳答案

问题的出现是因为行和列的选择是由两个不相关的模型处理的:一个改变两者选择的触发器(f.i. mousePressed)将首先改变一个,然后再改变另一个(不保证顺序) .因此,在收到一个更改通知时,您无法知道另一个是否已经更改。

要解决这个问题,请将您对通知的自定义处理包装到一个 invokeLater 中:这保证在处理完所有未决事件后发生:

@Override
public void columnSelectionChanged(ListSelectionEvent e) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
System.out.println(table.getSelectedColumn()); // this is correct
System.out.println(table.getSelectedRow()); // -1 on first click in JTable
}
});
}

关于java - JTable,TableColumnModelListener 检测选定的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17256272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com