2011-06-09 9 views
2

JTable内にlostFocusがある場合は、既存のセルの行と列を取得する必要があります。FocusLostイベント中にJTable selectedRowとselectedColumnを取得する方法

ただし、ソースは常にJTextFieldまたはJComboBoxのいずれかであるため、以下の条件は常にfalseです。

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

まあ、oppositeComponentがあります。奇妙なのは、このリスナーがテーブルにアタッチされている場合、ドキュメンテーションはテーブルが「ソース」コンポーネントでなければならないということです(FocusLostイベントであり、フォーカスを失ったコンポーネントはテーブル自体です)。

http://download.oracle.com/javase/1.4.2/docs/api/java/awt/event/FocusEvent.html#getOppositeComponent%28%29

+0

opposComponentはjavax.swing.JViewportです。 JTableではありません – Reusable

0

は、あなただけではないだけでフォーカスイベントで、だから、すべての時間は、使用のクリックはそれを更新

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

を使用して行&列の記録を保持してもらえますか?

+0

どのようなリスナーを使用しますか?現在私はFocusListenerを使用しています。 – Reusable

+0

ListSelectionListenerからFocusListenerに行と列の情報を共有する最良の方法は何ですか? – Reusable

0

セルに入力されたデータを(リターンを打つことなく)保存したいだけなら、何もする必要はありません。更新された情報はJTableTableModelに含まれています。

それ以外の場合は、.tableChanged()と関連するTableModelEventをご覧ください。最後の行/列が変更されます。常に最新のイベント行/列に更新される変数を保持することができます。私はあなたがリターンを打つことなく細胞の番号を変更する場合、それでもイベントとして登録すると思います。

0

ただし、ソースは常にJTextFieldまたはJComboBoxのいずれかであるため、以下の条件は常にfalseです。

これは、セルの編集を開始するときにfocusLostイベントが生成されていることを意味します。だから質問はなぜこれをやっているのですか?私はあなたの実際の要件を述べる必要があると思う、あなたが解決策が適切ではないように見せたので。

+0

機能要件は次のとおりです。 – Reusable

関連する問題