java - AbstractTableModel 和单元格编辑器

标签 java swing tablecelleditor abstracttablemodel

我找到的例子: 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/

相关文章:

java - JDK 9 是否应该不允许在覆盖方法中引用最终字段的 Lambda 表达式实例化?

java - 自动调整 Swing 组件的大小

java - 使用 AbstractTableModel 更改特定单元格的单元格编辑器

java - 在 android 上创建了两次 Activity

java - 解析包含单行和多行数据的文件

java - .jar 中的 WordNet 数据库目录相对路径

java - 如何将 Java ComboBox 的宽度设置为与其所在的 JPanel 一样宽?

java - 单击 JButton 时 Java 中 ActionListener 方法中的 FlowControl

java - JTable 中的 JButton 单击时不显示动画

swing - 带有 JComboBox 编辑器的 JTable : Is it possible to edit the cell value from keyboard with one key press