Java JTable在出现“时复制列”;“隐藏”;及;“显示”;他们
我目前正在使用JTable显示一些患者详细信息。我有一个JCheckBox,当勾选时,它会向表中添加一个新列,并向新列中添加数据。当它被取消勾选时,它应该删除该列,有点像向表中添加额外的过滤器。但是,当我在取消勾选后再次勾选该框时,它会复制表中的列 我尝试使用fireTableStructureChanged()方法,但它永远不会更新表,因此即使取消选中复选框,列也会保留在那里。但是如果我删除它,那么当我取消选中复选框时,它会工作,但是复制问题又回来了。选中复选框时,我粘贴了actionPerformed()方法。第一个图像是我单击复选框之前的表格。第二个是当我单击复选框并添加列时。最后第三个是当我取消勾选复选框并再次勾选时。任何帮助都将不胜感激Java JTable在出现“时复制列”;“隐藏”;及;“显示”;他们,java,swing,jtable,Java,Swing,Jtable,我目前正在使用JTable显示一些患者详细信息。我有一个JCheckBox,当勾选时,它会向表中添加一个新列,并向新列中添加数据。当它被取消勾选时,它应该删除该列,有点像向表中添加额外的过滤器。但是,当我在取消勾选后再次勾选该框时,它会复制表中的列 我尝试使用fireTableStructureChanged()方法,但它永远不会更新表,因此即使取消选中复选框,列也会保留在那里。但是如果我删除它,那么当我取消选中复选框时,它会工作,但是复制问题又回来了。选中复选框时,我粘贴了actionPerf
@Override
public void actionPerformed(ActionEvent e)
{
if (gui.getChkCholesterol().isSelected() == true)
{
try {
gui.getRightTableModel().addColumn("Cholesterol");
newColumnIndeces.put("2093-3",gui.getRightTable().getColumnCount()-1);
gui.getRightTableModel().addColumn("Cholesterol Effective Date/Time");
newColumnIndeces.put("2093-3e",gui.getRightTable().getColumnCount()-1);
if(gui.getRightTable().getRowCount()>0)
{
int columnNumberValue = newColumnIndeces.get("2093-3");
int columnNumberDate = newColumnIndeces.get("2093-3e");
for (int i = 0; i<gui.getRightTable().getRowCount(); i++)
{
String value = op.getPatientObservationValue(gui.getRightTable().getValueAt(i,0).toString(),"2093-3");
String date = op.getPatientObservationEffectiveDate(gui.getRightTable().getValueAt(i,0).toString(),"2093-3");
gui.getRightTableModel().setValueAt(value, i, columnNumberValue);
gui.getRightTableModel().setValueAt(date, i, columnNumberDate);
}
}
} catch (ParseException parseException) {
parseException.printStackTrace();
}
setCellColourForTable();
timer.schedule(new RefreshTable(), 0, seconds);
}
else
{
gui.getRightTable().removeColumn(gui.getRightTable().getColumnModel().getColumn(newColumnIndeces.get("2093-3")));
gui.getRightTable().removeColumn(gui.getRightTable().getColumnModel().getColumn(newColumnIndeces.get("2093-3e")-1));
newColumnIndeces.remove("2093-3");
newColumnIndeces.remove("2093-3e");
timer.cancel();
timer = new Timer();
}
gui.getRightTableModel().fireTableStructureChanged();
}
@覆盖
已执行的公共无效操作(操作事件e)
{
if(gui.getChkCholesterol().isSelected()==true)
{
试一试{
gui.getRightTableModel().addColumn(“胆固醇”);
newColumnIndeces.put(“2093-3”,gui.getRightTable().getColumnCount()-1);
gui.getRightTableModel().addColumn(“生效日期/时间”);
newColumnIndeces.put(“2093-3e”,gui.getRightTable().getColumnCount()-1);
如果(gui.getRightTable().getRowCount()>0)
{
int columnNumberValue=newColumnIndeces.get(“2093-3”);
int columnNumberDate=newColumnIndes.get(“2093-3e”);
对于(int i=0;i您可以使用以下命令向模型中添加一列:
gui.getRightTableModel().addColumn("Cholesterol");
这将通知视图数据已更改,表也将更新
但是,可以使用以下方法从表中删除该列:
gui.getRightTable().removeColumn(…);
这只会从“表视图”中删除该列。该列尚未从DefaultTableModel
中删除。因此,下次添加列时,它只会添加到DefaultTableModel
的末尾
因此,解决方案是从DefaultTableModel
中删除列,而不是从表中删除列
不幸的是,没有removeColumn(…)
方法
但是,由于您的要求是仅在DefaultTableModel
的末尾添加/删除列,因此您可以使用:
model.setColumnCount(model.getColumnCount() - 2);
这将有效地从模型中删除最后两列
另一个选项是不继续向DefaultTableModel添加列,而是可以直接从TableColumnModel
中添加/删除TableColumns
。因此这意味着胆甾体列的数据将始终在模型中,但视图不会显示列
因此,您将使用table.addColumn(…)
方法,而不是使用model.addColumn(…)
方法