我正在研究需要在jtable上顯示一些數據的項目。我發現了很多關於jtables的教程,但很少有關於如何自定義AbstractTableModel的教程,大多數部件都是現成的代碼。 即使在Oracle的頁面中,我發現了這個通用的jtable教程,但很少有關於 AbstractTableModel以及如何製作自定義模型的信息。 Oracle Jtable Tutorial 我是新來編程,所以將apriciate我的水平skils的教程。 先進的謝謝。AbstractTableModel教程
3
A
回答
18
AbstractTableModel包含三個需要覆蓋的方法。它們是:
public int getRowCount();
public int getColumnCount();
public Object getValueAt(int row, int column);
JTable使用這些方法來發現許多領域(行和列)有,並獲得價值(Object類型)如何OB每個字段。當您覆蓋這些方法時,您需要使用哪種數據類型。例如,你可以使用二維對象數組:
Object[][] data;
或一個ArrayList或Hashtable中:
List<Object[]> data = new ArrayList<Object[]>();
的修復大小的數組,可能會更容易使用,但它是更加困難做動態添加值。當然你也可以使用地圖或其他數據結構。您只需要調整上述三種方法的實現方式,以從數據結構中返回適當的信息,例如您的模型當前包含多少行等。
還有幾種方法可以可以覆蓋但不必,例如,如果您想要自定義列名稱,則必須另外覆蓋public String getColumnName(int col)
方法。例如像這樣:
private static final String[] COLUMN_NAMES = {"User", "Password", "Age"};
public String getColumnName(int col) {
return COLUMN_NAMES[col];
}
看的Javadoc AbstractTableModel獲得的可覆寫其他方法的概述。
如果你希望能夠改變數據在TableModel中,那麼你需要覆蓋setValueAt
方法(如果我沒有記錯的話):
void setValueAt(Object aValue, int rowIndex, int columnIndex) {
//depending on your data structure add the aValue object to the specified
//rowIndex and columnIndex position in your data object
//notify the JTable object:
fireTableCellUpdated(row, col);
}
重要:無論何時添加或刪除行,那麼TableModel實現中的相應函數必須調用相應的fireTableRowsInserted(或者刪除)函數。否則,你會看到奇怪的視覺效果發生在你的JTable:
public void addRow(Object[] dates) {
data.add(dates);
int row = data.indexOf(dates);
for(int column = 0; column < dates.length; column++) {
fireTableCellUpdated(row, column);
}
fireTableRowsInserted(row, row);
}
相關問題
- 1. AbstractTableModel中的NullPointer
- 2. AbstractTableModel生成ClassCastException
- 3. Java AbstractTableModel repaint();
- 4. AbstractTableModel中的NullPointerException getRowCount
- 5. PlayN入門教程教程
- 6. 使用AbstractTableModel獲取選定的行JTable使用AbstractTableModel
- 7. 擴展定製AbstractTableModel上
- 8. 添加Clickable JPanel到AbstractTableModel
- 9. JTable用AbstractTableModel刪除多行
- 10. 爲Java集合實現AbstractTableModel
- 11. 從AbstractTableModel獲取列名稱
- 12. Java AbstractTableModel動態填充行
- 13. AbstractTableModel不會更新JTable
- 14. 用mysql教程燒瓶應用教程
- 15. msdn「Direct3D教程Win32示例」教程2
- 16. Rails入門教程中的TypeError教程
- 17. 任何read_stream教程javascript sdk教程?
- 18. Flash編程教程
- 19. Posix線程教程
- 20. Wii編程教程
- 21. android sectionindexer教程?
- 22. 教程在IOS7
- 23. ActiveMQ C++教程
- 24. CORTEX lpc1768教程
- 25. Gwt + Guice教程
- 26. SnapSVG教程
- 27. SBT 0.10教程
- 28. ATL GUI教程
- 29. Turbogears 2教程?
- 30. MSHTML MFC教程
你有沒有經歷[本教程(http://docs.oracle.com/javase/tutorial/uiswing/components/table.html)? – 2012-03-23 20:05:04
是的。我做到了。我發現大部分都很簡單,但在AbstractTableModel上沒有太多的信息。 – Vagelism 2012-03-23 20:09:58
或者你真的嘗試過嗎?聲明你的類(例如MyTableModel),擴展AbstractTableModel,你會看到你需要實現的方法。他們的名字和返回類型相當直接,不應該太複雜。 – 2012-03-23 20:19:54