[英]AbstractTableModel and cell editor
我找到的示例: http : //www.java2s.com/Code/Java/Swing-Components/ButtonTableExample.htm顯示如何使用指定的列(按鈕)創建JTable。 它工作正常,但我的問題是,我需要使用AbstractTableModel而不是DefaultTableModel(如示例所示)。
所以我創建了自己的TableModel,它擴展了AbstractTableModel:
public class TableModel extends AbstractTableModel { //..
}
並替換:
DefaultTableModel dm = new DefaultTableModel();
dm.setDataVector(new Object[][] { { "button 1", "foo" },
{ "button 2", "bar" } }, new Object[] { "Button", "String" });
JTable table = new JTable(dm);
對於:
JTable table = new JTable(new TableModel());
然后沒有任何反應,當我點擊某一行按鈕時。 有什么建議么?
確保重寫AbstractTableModel.isCellEditable
方法以使用按鈕為列返回true
,否則將不會觸發編輯器。 默認情況下,此方法返回false
。
此外,請確保覆蓋getColumnName()
以返回正確的名稱,因為您鏈接的示例嘗試查找名為“Button”的列來設置編輯器。
你可能會發現@camickr對Table Button Column的實現非常有用。
此演示模型可以與鏈接樣本中的編輯器和渲染器一起使用:
public class DemoTableModel extends AbstractTableModel {
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return (columnIndex == 0);
}
@Override
public int getRowCount() {
return 2;
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public String getColumnName(int columnIndex) {
switch (columnIndex) {
case 0:
return "Button";
case 1:
return "Value";
}
return null;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
return "Button";
case 1:
return "Value";
}
return null;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.