java - 如何将默认表模型与表头同步?

标签 java swing

我在列标题上编写了操作监听器,允许用户重命名所选列并添加新列。

重命名列的代码 -

int column = jTable1.getSelectedColumn();

            if (column == -1) {
                return;
            }
            boolean blag = true;
            String sColumnName = null;
            while (blag) {

                sColumnName = (String) JOptionPane.showInputDialog(jTable1, "Enter Column Name", "Add Column", JOptionPane.INFORMATION_MESSAGE, null, null, null);

                if (sColumnName == null) {
                    return;
                }
                if (sColumnName.trim().equalsIgnoreCase("")) {
                    JOptionPane.showMessageDialog(jTable1, "Column name can not be blank.");
                    blag = true;
                } else {
                    blag = false;
                }

            }
            int viewColumn = jTable1.convertColumnIndexToView(column);
            TableColumn tableColumn = jTable1.getColumnModel().getColumn(viewColumn);
            tableColumn.setHeaderValue(sColumnName);
            jTable1.getTableHeader().repaint();

在 JTable 中添加新列的代码。

boolean blag = true;
            String sColumnName = null;
            while (blag) {

                sColumnName = (String) JOptionPane.showInputDialog(jTable1, "Enter Column Name", "Add Column", JOptionPane.INFORMATION_MESSAGE, null, null, null);

                if (sColumnName == null) {
                    return;
                }
                if (sColumnName.trim().equalsIgnoreCase("")) {
                    JOptionPane.showMessageDialog(jTable1, "Column name can not be blank.");
                    blag = true;
                } else {
                    blag = false;
                }

            }

            defaultTableModel.addColumn(sColumnName);

但问题是,当我重命名该列,然后添加一个新列时,会添加一个新列,但它显示刚刚重命名的列的旧名称。

如何将默认表格模型与表格标题同步?

最佳答案

没有用于在 Default/TableModel 上重命名 header 的 API。选项是子类/实现自定义模型或欺骗默认模型,如下所示(伪代码):

Object[] headers = new Object[tableModel.getColumnCount()]; 
forEach (model-column)
    if (index == renamedColumn)
       headers[index] = newHeader
    else
       headers[index] = tableModel.getColumnName(index)
tableModel.setColumnIdentifiers(headers)

(注意:假设标识符与名称相同)

关于java - 如何将默认表模型与表头同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5754120/

相关文章:

java - 使用 Spark 和 Java 进行分层抽样

java - 从 InputStreamReader 将 Json 转换为 gson

java - 在面板中排列项目

Java:JOptionPane 单选按钮

java - 在 ActionListener 外部访问 JButton ActionListener 内部所做的更改

Java 文件树错误(FileTreeModel 无法解析为类型)

java - 如何使用 freemarker 动态构建对哈希的访问?

Java:负索引和 OR 逻辑运算符

java - 如何从 Netbeans 中删除自动生成的代码

Java向JCalendar添加图标