java - 如何强制 jTable 不可编辑?

标签 java swing jtable

据我所知,理论上您可以通过创建 AbstractTableModel 强制 jTable 不可编辑,并通过始终返回 false 来覆盖以下方法(尽管这不是必需的,因为默认方法来自AbstractTableModel 已经返回 false)。

@Override
public boolean isCellEditable(int row, int column) {
   return false;
}

但似乎我仍然无法弄清楚如何使这项工作适合我的代码。我究竟做错了什么?这是我的代码:

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class Datagrid extends AbstractTableModel {
    private static final long serialVersionUID = -1080095595481949205L;
    private String[] title;
    private String[][] data;
    private JTable table;
    private JFrame frm;

    public Datagrid(String[] title, String[][] data) {
        this.title = title;
        this.data = data;

        create_table();
    }

    public JTable getTable() {
        return table;
    }

    private void create_table() {
        table = new JTable(data, title);

        frm = new JFrame();
        frm.getContentPane().add(new JScrollPane(table));
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frm.pack();
        frm.setVisible(true);
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }

    @Override
    public int getColumnCount() {
        return table.getColumnCount();
    }

    @Override
    public int getRowCount() {
        return table.getRowCount();
    }

    @Override
    public Object getValueAt(int row, int column) {
        return table.getValueAt(row, column);
    }

}

最佳答案

首先,不要在模型中创建 UI 元素...

其次,不要在事件调度线程之外创建 UI 元素

第三(正如 cubanacan 所指出的),您还没有将模型应用到 table 上......

public static void main(String args[]) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            TableModel model = new Datagrid(); // <-- Create a new instance of the model
            table = new JTable(model);         // <-- Apply it to the table..

            frm = new JFrame();
            frm.getContentPane().add(new JScrollPane(table));
            frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frm.pack();
            frm.setVisible(true);
        }
    });
}

古巴人着火了...

第四,以下内容会使您的程序崩溃。这些方法由表调用,以便说明如何配置自身。

public int getColumnCount() {
    return table.getColumnCount();
}

@Override
public int getRowCount() {
    return table.getRowCount();
}

@Override
public Object getValueAt(int row, int column) {
    return table.getValueAt(row, column);
}

您应该引用您尝试建模的内部数据结构。

通读 How to Use Tables 可能会有所帮助

关于java - 如何强制 jTable 不可编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13304446/

相关文章:

主服务器的 Java TCP 保持 Activity 状态

java - 从 jtabbedpane 中的组件 jlabel 获取标题

Windows 7 外观上的 Java Swing 渲染错误?

java - 使用 JTable 正确排序 double

java - 关闭 JTable 实例

java - 从批处理文件中终止从 Java 启动的进程

java - 使用自定义异常

java - 如何使用在不同类中实例化的对象中的方法?

java - 动态 JTable - 从所有行获取数据

java - ConcurrentHashMap 上的同步是否正确?