我找到的例子: http://www.java2s.com/Code/Java/Swing-Components/ButtonTableExample.htm 显示如何创建具有指定列(按钮)的 JTable。它工作正常,但我的问题是,我需要使用 AbstractTableModel 而不是 DefaultTableModel(如示例所示)。
所以我创建了自己的 TableModel,它扩展了 AbstractTableModel:
public class TableModel extends AbstractTableModel {
//..<br/>
}
并替换:
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”的列来设置编辑器。
您可能会找到 Table Button Column @camickr 的实现很有用。
此演示模型可与链接示例中的编辑器和渲染器配合使用:
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;
}
}
关于java - AbstractTableModel 和单元格编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15868179/