JTable复选框应在选中时启动计时器

时间:2014-05-12 06:51:22

标签: java swing timer jtable

我希望在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);
            }

    }

我是否需要传递一个包含开始时间位置的数组?这让我很困惑。

1 个答案:

答案 0 :(得分:3)

以下是执行此操作的一种方法概述:

  • TableModel的实施中,管理List<Row>,其中每个Row包含Boolean的复选框和long值开始和停止时间;

  • 。{/ p>
  • 调整CellEditorSystem.currentTimeMillis()的开始和结束时间。

  • Render使用suitable format作为经过时间的差异。

  • javax.swing.TimerItemListener中,定期在模型中为每个有效ActionListener调用setValueAt();听力表应该自动更新。

显示了一个相关示例here