如何动态更改我的TableModel的列模型

时间:2017-07-05 09:38:43

标签: java swing jtable

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

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

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调用相同的方法,但列不会更改。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

jScrollPaneAmministrazione = new javax.swing.JScrollPane();

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

不要创建新的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();