JTable Checkbox 应在选中时启动计时器
Posted
技术标签:
【中文标题】JTable Checkbox 应在选中时启动计时器【英文标题】:JTable Checkbox should start timer when checked 【发布时间】:2014-06-29 10:37:14 【问题描述】:我希望在 JTable 中有一个列来计算表中布尔列为“真”的时间。它是一个计时器,用于检查复选框的选中时间。我无法理解算法的所有机制。
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);
我需要传递一个包含开始时间位置的数组吗?这让我很困惑。
【问题讨论】:
runnable example that demonstrates your problem 会带来更好的响应和更少的猜测 不要调用 fireTableRowsUpdated(i,i);在模型方法之外 【参考方案1】:以下是执行此操作的一种方法的概述:
在TableModel
的实现中,管理一个List<Row>
,其中每个Row
包含一个Boolean
用于复选框,long
值用于开始和停止时间;根据需要使用System.currentTimeMillis()
。
在CellEditor
中的ItemListener
中设置开始和停止时间。
Render 使用suitable format 表示经过时间的差异。
在javax.swing.Timer
的ActionListener
中,为每个活动的Row
定期调用模型中的setValueAt()
;监听表应该会自动更新。
一个相关的例子显示在here。
【讨论】:
很好的答案,谢谢。还有一个问题:如何制作“行”列表?以上是关于JTable Checkbox 应在选中时启动计时器的主要内容,如果未能解决你的问题,请参考以下文章