如何动态更改我的TableModel的列模型 [英] How to change column model of my TableModel dynamically

查看:128
本文介绍了如何动态更改我的TableModel的列模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a simple Java Desktop application that show a JTable with a custom TableModel.

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

In base of a boolean variables, I want to show a Table with different column. But I'm not able to do this.

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调用相同的方法,但列不变.

Now at first time, I call the method with variables isNero = true. At the second time, I call the same method with variables isNero = false but the columns not changes.

我该如何解决?

推荐答案

jScrollPaneAmministrazione = new javax.swing.JScrollPane();

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

You create a new JScrollPane, but you never add the scroll pane to the frame. Changing the value of the reference variable does NOT add the component to the frame.

不要创建新的JTable或JScrollPane!

Don't create a new JTable or JScrollPane!

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

Instead you can just update the TableModel of the table that is currently display on the frame:

//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();

这篇关于如何动态更改我的TableModel的列模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆