java - 如何动态更改 TableModel 的列模型

标签 java swing jtable

我有一个简单的 Java 桌面应用程序,它显示带有自定义 TableModel 的 JTable。

在 boolean 变量的基础上,我想显示一个具有不同列的表。 但我无法做到这一点。

This is my code:

static String[] ColName = { "Cod.Articolo","Nome Articolo","Cod.Barre", "Qtà.iniziale","Scontrini(-)","Bolla(-)","Fattura(-)","DDT(-)","NC(+)","Carico(+)"};
static String[] ColNameNero = { "Cod.Articolo","Nome Articolo","Cod.Barre", "Qtà.iniziale","Scontrini(-)","Scontrini Nero(-)","Bolla(-)","Fattura(-)","DDT(-)","NC(+)","Carico(+)"};


public void creaTabellaMerci(boolean isNero){
    try{
        if(isNero)
            tableMovimentiMagazzinoMerci = new MyTableModelMovimentiMagazzinoMerci(ColNameNero,isNero);
        else
            tableMovimentiMagazzinoMerci = new MyTableModelMovimentiMagazzinoMerci(ColName,isNero);

        tableMovimentiMerci = new DefaultTableCustom(tableMovimentiMagazzinoMerci);
        sorter = new TableRowSorter<MyTableModelMovimentiMagazzinoMerci>(tableMovimentiMagazzinoMerci);
        tableMovimentiMerci.setRowSorter(sorter);
        jScrollPaneAmministrazione = new javax.swing.JScrollPane();
        jScrollPaneAmministrazione.setViewportView(tableMovimentiMerci);
        jScrollPaneAmministrazione.setPreferredSize(dTabella2);
        jScrollPaneAmministrazione.getViewport().add(tableMovimentiMerci);
        tableMovimentiMagazzinoMerci.fireTableDataChanged();
        tableMovimentiMerci.repaint();
    }catch(Exception e){
        log.logStackTrace(e);
    }
}

现在,我第一次使用变量 isNero = true 调用该方法。第二次,我使用变量 isNero = false 调用相同的方法,但列没有更改。

如何修复它?

最佳答案

jScrollPaneAmministrazione = new javax.swing.JScrollPane();

您创建了一个新的 JScrollPane,但从未将滚动 Pane 添加到框架中。更改引用变量的值不会将组件添加到框架中。

不要创建新的 JTable 或 JScrollPane!

相反,您可以只更新当前显示在框架上的表格的 TableModel:

//tableMovimentiMerci = new DefaultTableCustom(tableMovimentiMagazzinoMerci);
tableMovimentiMerci.setModel( tableMovementiMagazzinoMerci );
sorter = new TableRowSorter<MyTableModelMovimentiMagazzinoMerci>(tableMovimentiMagazzinoMerci);
tableMovimentiMerci.setRowSorter(sorter);
//jScrollPaneAmministrazione = new javax.swing.JScrollPane();
//jScrollPaneAmministrazione.setViewportView(tableMovimentiMerci);
//jScrollPaneAmministrazione.setPreferredSize(dTabella2);
//jScrollPaneAmministrazione.getViewport().add(tableMovimentiMerci);
//tableMovimentiMagazzinoMerci.fireTableDataChanged();
//tableMovimentiMerci.repaint();

关于java - 如何动态更改 TableModel 的列模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44922476/

相关文章:

java - 如何修改 TableCellRenderer 而不丢失默认渲染?

java - 是否可以同时使用 L 和 E 字母来初始化 'Long' 数字文字?

java - 将多个参数传递给rest API - Spring

java - Swing 和 WebEditorKit - 在 SwingFrame 中显示我的浏览器

java - JCombobox 字符串项(可见)和整数键(固有)

java - 在 JTable 中单独合并列标题

java - Spark Local Mode - 所有作业只使用一个 CPU 内核

java - 运行测试用例时出现以下异常

java - 如何禁用鼠标单击按钮操作事件?

java - 如何将复选框添加到 JTree 节点以管理多选?