如何动态更改我的TableModel的列模型 [英] How to change column model of my TableModel dynamically
问题描述
我有一个简单的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屋!