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&lt;Row&gt;,其中每个Row 包含一个Boolean 用于复选框,long 值用于开始和停止时间;根据需要使用System.currentTimeMillis()

CellEditor 中的ItemListener 中设置开始和停止时间。

Render 使用suitable format 表示经过时间的差异。

javax.swing.TimerActionListener 中,为每个活动的Row 定期调用模型中的setValueAt();监听表应该会自动更新。

一个相关的例子显示在here。

【讨论】:

很好的答案,谢谢。还有一个问题:如何制作“行”列表?

以上是关于JTable Checkbox 应在选中时启动计时器的主要内容,如果未能解决你的问题,请参考以下文章

该复选框在未选中时不能返回 False,但在选中时可以返回 True

UITableView 单元格分隔符在选中时消失

IOS PDFKit - 注释内容仅在选中时可见

iOS 8 UITableView 单元格在选中时会跳转

仅在选中时读取 GTK 单选按钮信号

Foreach 仅在选中时才选择第一个复选框