2011-03-27 89 views
4

我試圖找到一種方法來檢測用戶在JTable中選擇的列的更改。我做了一些探討,看來你需要以某種方式使用TableColumnModelListener來檢測變化,但是當你改變你選擇的列時,這似乎不會觸發事件。檢測JTable中的選擇更改

+2

什麼程序功能都在嘗試提供? – 2011-03-28 00:09:49

+0

我有一個JTable,現在基本上可以用作pictoral日曆。我希望用戶可以點擊日曆中的某個單元格,並將該日期的所有約會都彈出到單獨的JTable中(這是在日曆檢測到用戶選擇了其他單元格時起作用的功能)。 – Jonathan 2011-03-28 00:36:54

+1

@Jonathon謝謝你的解釋。它通常有助於說明目標,以及您爲實現該目標而採取的任何策略,以防萬一實現實際目標存在更好的策略。至少,它會給人們一個回答的上下文。說實話,在你添加目標之前,我並不瞭解這個問題的確切性質。說明目標也有助於滿足人們的好奇心。 ;) – 2011-03-28 06:54:46

回答

13

您需要添加一個ListSelectionListener代替。這將捕獲選擇事件。下面是進一步深入進去一些搖擺教程:

http://download.oracle.com/javase/tutorial/uiswing/events/listselectionlistener.html http://download.oracle.com/javase/tutorial/uiswing/components/table.html#selection

+0

我已經有了一個listselectionlistener,它在從第2行第3列到第3行第3列時有奇效。但是,它非常類似那裏的演示,當您從行中更改所選內容時,它不會觸發事件2列3至第2列第2列,因此無法檢測到變化。 – Jonathan 2011-03-28 01:40:24

+2

在這種情況下,您需要兩個listselectionlisteners。一個添加到列模型就像這個例子:http://download.oracle.com/javase/tutorial/uiswing/examples/components/index.html#SimpleTableSelectionDemo – jzd 2011-03-28 01:48:10

+0

遲來的謝謝一堆。我無法在所有搜索中找到該網站,這正是我所尋找的。也許我需要調整我的搜索技巧:\ – Jonathan 2011-03-31 04:57:16

0

如果「改變」你的意思是更改單元格的值,那麼你可以使用一個AbstractTableModel貫徹fireTableCellUpdated方法

+0

不,我在考慮用戶何時點擊不同的單元格,而不是當他們改變一個值時。表格中的數據無法編輯。 – Jonathan 2011-03-28 00:17:19

2

從我讀,我想你需要一個的MouseListener添加到您的表,例如在的mouseClicked將獲得的行和列使用下面的代碼,如下:



table.addMouseListener(new MouseListener() 
{ 
    @Override 
    public void mouseClicked(MouseEvent e) 
    { 
     Point pnt = evt.getPoint(); 
     int row = table.rowAtPoint(pnt); 
     int col = table.columnAtPoint(pnt); 
    } 
} 

它應該對你很好我以前使用過類似的東西。 BTW它類似於我在coderanch,鏈接發現了問題: http://www.coderanch.com/t/332737/GUI/java/detect-single-click-any-cell

祝你好運,博羅

+3

否 - 要求是在「選定」列中檢測到更改。這是一個高級(又名:語義)狀態,可以通過大量的低級事件(如鼠標,鍵盤,語音輸入)來改變它。作爲一般規則,總是要提供最高級別的抽象。 – kleopatra 2011-03-28 11:38:19