我希望在JTable中有一个列,用于计算表中布尔列为"true"的时间。它是一个计时器,用于显示复选框的选中时间。我很难理解算法的所有机制。
ActionListener actListner = new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.out.println("k");
aTable.updateTime();
}
};
Timer timer = new Timer(1000, actListner);
timer.start();
TableModelListener tableListener = new TableModelListener()
{
public void tableChanged(TableModelEvent e)
{
int row = e.getFirstRow();
int column = e.getColumn();
TableModel model = (TableModel)e.getSource();
String columnName = model.getColumnName(column);
Object data = model.getValueAt(row, column);
if (aTable.data.getVisible(row))
{
//aTable.data.setTimeVisible(row, date math);
}
}
};
"updateTime(("函数用于跟踪一行添加后存在的时间量,我也在考虑使用该函数(因为它每次都会被计时器调用(来设置复选框选中的跟踪器的值,但我不确定。
public void updateTime()
{
//data.updateTime();
Date newTime = new Date();
Integer time = null;
System.out.println("updateTime");
for (int i = 0; i < data.startTime.size(); i++)
{
time = Integer.parseInt(data.twoMin.format(new Date(newTime.getTime() - data.startTime.get(i).getTime())));
//Date waiting = new Date(time);
if (time >= 10)
{
data.setTimeWaiting(i, data.twoMin.format(new Date(newTime.getTime() - data.startTime.get(i).getTime())));
System.out.println("2");
}
else if (time < 10)
{
data.setTimeWaiting(i, (data.oneMin.format(new Date(newTime.getTime() - data.startTime.get(i).getTime()))));
System.out.println("1");
}
fireTableRowsUpdated(i,i);
}
}
我是否需要传递一个包含开始时间位置的数组?这让我很困惑。
以下是一种方法的概述:
-
在
TableModel
的实现中,管理一个List<Row>
,其中每个Row
包含一个用于复选框的Boolean
和用于开始和停止时间的long
值;根据需要使用System.currentTimeMillis()
。 -
在
CellEditor
中的ItemListener
中调节开始和停止时间。 -
使用适当的格式将差异渲染为经过的时间。
-
在
javax.swing.Timer
的ActionListener
中,针对每个活动的Row
周期性地调用模型中的setValueAt()
;侦听表应该自动更新。
这里显示了一个相关的示例。