将JTable中的按钮更改为JProgressBar

时间:2016-08-08 19:03:47

标签: java jtable jbutton jprogressbar

我有一个非常特别的问题。我有一个表,其中包含一个带按钮的列。我使用ButtonColumn类实现了这个按钮,如下所示:http://tips4java.wordpress.com/2009/07/12/table-button-column/。我想要的是当用户点击按钮并且任务正在执行时出现进度条。当用户单击该按钮时,将使用SwingWorker类执行操作。我设法通过向类中添加JProgressBar来获取进度条,然后修改getTableCellRendererComponent()方法以包含if-else语句:

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row,     int column)
{
     if ("Update".equals(value.toString())) {
         return renderButton;
     }
     else {
         return renderBar;
     }
}

我检查单元格的值,如果是字符串"更新"然后返回按钮,否则返回进度条。请注意,进度条是不确定的,因此我不关心单元格中的值(这就是单元格值为字符串的原因)。这有助于显示静态进度条。它没有动。如何让酒吧动画?我已经向扩展SwingWorker类的任务添加了一个PropertyChangeListener,并且在监听器中我更新了表格单元格的值(使用随机字符串):

final myTask task = new myTask();
task.addPropertyChangeListener(new PropertyChangeListener() {
    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        if (evt.getPropertyName().equalsIgnoreCase("progress")) {
            table.setValueAt(randomString, row, col);
            int progress = task.getProgress();
            if (progress == 100) {
                //set the value to "Update" to change the bar to a button
                table.setValueAt("Update", row, col);
            }
        }
    }
});

单击按钮时,按钮将变为静态进度条,然后当任务完成后,它将再次变为按钮。唯一的问题是在动画中。我也尝试覆盖TableModel中的setValueAt函数,以便调用fireTableCellUpdated(row,col)方法,但这没有效果。

更新: 当我将条设置为确定(并在表中设置整数值)时,动画可以正常工作。但是,当我将其设置为不确定时,它不会。

0 个答案:

没有答案