You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何替换Java自定义DefaultTableModel中String数组的指定字符

解决方案

要实现将列名中的$$替换为tipologiaSconto变量的值,需要调整列名的初始化逻辑(原columnNames是静态常量,无法在实例化时动态修改),具体实现如下:

关键修改点

  1. 将原静态常量列名改为模板数组,保留$$作为占位符;
  2. 在构造方法中动态生成新的列名数组,替换占位符为tipologiaSconto的值;
  3. 用修改后的列名数组初始化父类DefaultTableModel;
  4. 修正原代码中的大小写错误(defaultTableModel改为DefaultTableModel),并补充缺失的getConsentiModificaDescrizione()方法。

修改后的完整代码

import javax.swing.table.DefaultTableModel;
import java.util.HashMap;

public class MyTableModelScontriniArticoli extends DefaultTableModel {
    // 列名模板,保留$$作为占位符
    private static final String[] BASE_COLUMN_NAMES = {"Cod.Prod.", "Descrizione", "Qta","Prezzo cad.","Sconto $$","Prezzo Tot"};
    public HashMap<String, ArticoliScontrini> mappaArticoli = new HashMap<>();
    
    public Boolean gestisciTagliaColore;
    private Boolean consentiModificaDescrizione;
    private String tipologiaSconto;

    public MyTableModelScontriniArticoli(boolean gestisciTagliaColore, boolean consentiModificaDescrizione, String tipologiaSconto) {
        // 克隆模板数组,避免修改原常量
        String[] modifiedColumnNames = BASE_COLUMN_NAMES.clone();
        // 遍历替换占位符,空值处理避免空指针
        String replacement = tipologiaSconto != null ? tipologiaSconto : "";
        for (int i = 0; i < modifiedColumnNames.length; i++) {
            modifiedColumnNames[i] = modifiedColumnNames[i].replace("$$", replacement);
        }
        // 用修改后的列名初始化父类
        super(modifiedColumnNames, 1);
        
        this.gestisciTagliaColore = gestisciTagliaColore;
        this.consentiModificaDescrizione = consentiModificaDescrizione;
        this.tipologiaSconto = tipologiaSconto;
    }

    public MyTableModelScontriniArticoli(String[] columnnames2, int i) {
        super(columnnames2, 1);
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        if (this.consentiModificaDescrizione != null && this.consentiModificaDescrizione) {
            return columnIndex > 0 && columnIndex <= 4;
        } else {
            return columnIndex > 1 && columnIndex <= 4;
        }
    }

    // 补充缺失的getter方法,适配原代码中的调用
    public Boolean getConsentiModificaDescrizione() {
        return consentiModificaDescrizione;
    }
}

说明

  • 使用clone()复制模板数组,保证原静态模板不被修改;
  • 增加了tipologiaSconto的空值判断,防止替换时出现NullPointerException;
  • 修正了原代码中defaultTableModel的大小写错误(Java类名需大写开头);
  • 补充了getConsentiModificaDescrizione()方法,解决原代码中编译报错的问题。

内容的提问来源于stack exchange,提问作者bircastri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 01:07:39