我有一个非常特别的问题。我有一个表,其中包含一个带按钮的列。我使用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)方法,但这没有效果。
更新: 当我将条设置为确定(并在表中设置整数值)时,动画可以正常工作。但是,当我将其设置为不确定时,它不会。