2011-06-09 76 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

相關問題