我想爲我的一些JTables實現一個ListSelectionListener。簡單地說(現在)ListSelectionListener應該簡單地返回被選擇的單元格的文本。將對象投射到JTable?
我的程序設計有幾個JTables,我希望有一個ListSelectionListener爲他們工作。在ListSelectionListener的ValueChanged事件我認爲這是可能做這樣的事情:
private class SelectionHandler implements ListSelectionListener {
public void valueChanged(ListSelectionEvent e)
{
JTable table = (JTable)e.getSource();
String data = (String) table.getValueAt(table.getSelectedRow(), 0);
// Print data
}
}
我用下面的代碼來獲取SelectionHandler問題與表在幕後工作:
fbTable.setCellSelectionEnabled(true);
ListSelectionModel cellSM = fbTable.getSelectionModel();
cellSM.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
cellSelectionModel.addListSelectionListener(selectionHandler);
當我運行該程序,我得到一個ClassCastException錯誤:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.DefaultListSelectionModel cannot be cast to javax.swing.JTable
at cardboardfantasy.CardboardFantasyView$SelectionHandler.valueChanged(CardboardFantasyView.java:360)
// This is the line in question: JTable table = (JTable)e.getSource();
有沒有辦法做這樣的事情?我想到的一個解決方案是將事件源(e.getSource())與我所有的JTable進行比較,以查看它們是否相同(塊大),然後在該塊內調用.getValueAt,但會使代碼如果要添加或刪除表格,將來會很困難。
你應該可以做這樣的事情。你有兩條線投。哪一行拋出'ClassCastException'?什麼是對象的實際類型(異常消息應該說一些其他類名)? – erickson 2010-05-18 19:37:32
我想「e」應該是一個事件。那麼,你是否能夠弄清楚,實際的來源是什麼?是否有東西疊在桌子上,這會成爲事件的根源?這可能有助於發佈更多的代碼。 – 2010-05-18 19:37:42
您沒有提供必要的信息。請在你的問題中包含完整的錯誤信息。 – erickson 2010-05-18 19:44:45