我有一个简单的 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/