2011-06-09 77 views
2

每当JTable中存在lostFocus时,我需要捕获现有单元格的行和列。如何在FocusLost事件期间获取JTable selectedRow和selectedColumn

但是,以下条件始终为false,因为源始终是JTextField或JComboBox。

public void focusLost(FocusEvent e) { 
int row, col; 

Object source = e.getSource(); 
if(((Component) source).getParent() instanceof JTable_Ext){ //<-- always false 
    table = (JTable_Ext) ((Component) source).getParent(); 
    row = table.getSelectedRow(); 
    col = table.getSelectedColumn(); 
} 

为了缓解上述问题,我记得FocusGained(作为类级变量)时的行和列。问题是,如果用户在JTable中的所有位置点击非常快,那么行和列信息将不同步。

有没有办法在FocusLost期间获得行和列?如果没有,是否有更好的方法来做到这一点?

回答

0

你能不能保持连续&列的记录使用

table.getSelectionModel().addListSelectionListener(...); 
table.getColumnModel().getSelectionModel().addListSelectionListener(...); 

所以每次使用点击更新,不只是焦点事件?

+0

我应该使用什么样的Listener?目前我正在使用FocusListener。 – Reusable 2011-06-09 13:19:00

+0

我的意思是,将ListSelectionListener中的行和列信息共享到FocusListener的最佳方式是什么? – Reusable 2011-06-09 13:50:44

0

如果你只是想保存在单元格中输入的数据(没有返回),那么你不需要做任何事情。更新的信息包含在JTableTableModel内。

否则,您可以查看.tableChanged()和关联的TableModelEvent,它会给您最后一行/列进行修改。您可以保留一个始终更新为最新的事件行/列的变量。我猜如果你改变一个单元格号而没有返回,它仍然是一个事件。

0

但是,下面的条件始终是错误的,因为源始终是JTextField或JComboBox。

这意味着开始编辑单元格时正在生成focusLost事件。所以问题是你为什么要这样做?我认为你需要说明你的实际需求,因为你尝试的解决方案似乎不合适。

+0

功能要求是这样的: – Reusable 2011-06-10 06:39:52

相关问题