如何在while循环中更新jLabel?我的理解是使用javax.swing.timer然而我不太明白它因为我需要执行一个动作,现在这是一个while循环,需要在每次通过while循环时更新一个计数器。 / p>
有没有更简单的方法来做到这一点,如果是这样,我应该使用什么而不是jLabel?
示例代码低于我需要更新的内容。
int rowCount = 0;
while(rowIterator.hasNext())
{
jLabel5.setText(""+ rowCount); //<-- i need this to update
myRow = sheet.getRow(count);
cellIterator = myRow.cellIterator();
Cell myCell2 = myRow.getCell(0);
nextCell= myCell2.getStringCellValue();
if(nextCell.equals(firstCell))
{
while(cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch(cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.print(cell.getBooleanCellValue() + "\t\t");
break;
case Cell.CELL_TYPE_NUMERIC:
cell.setCellType(Cell.CELL_TYPE_STRING);
System.out.print(cell.getStringCellValue()+",");
//System.out.print(cell.getStringCellValue() + "\t\t");
writer.write(cell.getStringCellValue()+",");
break;
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue()+",");
//System.out.print(cell.getStringCellValue() + "\t\t");
writer.write(cell.getStringCellValue()+",");
break;
}
}
System.out.println();
writer.newLine();
count++;
rowCount++;
}
else
{
writer.close();
myRow = sheet.getRow(count);
myCell2= myRow.getCell(0);
nextCell=myCell2.getStringCellValue();
firstCell=nextCell;
Matter = "Matter Number: "+firstCell;
num = firstCell;
System.out.println(Matter);
fWriter = new FileWriter(new File(directory, num+"_"+curdate+"_"+curtime+".csv"));
writer = new BufferedWriter(fWriter);
writer.write(Matter);
writer.newLine();
writer.write(header);
writer.newLine();
}
}
}
catch (Exception e)
{
}
答案 0 :(得分:3)
你遇到的问题是Swing是一个单线程环境。也就是说,有一个线程负责调度所有事件并处理所有重绘请求。
阻止此线程的任何操作都会阻止它更新UI(或响应新事件),使您的UI看起来像是挂起的。
你遇到的另一个问题是UI的所有更新都应该只在这个线程的上下文中执行(你不应该尝试从另一个线程更新UI)。
在你的情况下,javx.swing.Timer
无法提供帮助,因为计时器会定期“滴答”,你需要一些可以用来回拨EDT来执行所需更新的东西。 / p>
在这种情况下,我建议您使用SwingWorker
你可以看看
对于一些例子和想法
答案 1 :(得分:0)
如果您想显示所有值,那么
String temp = "";
while(i < 100) {
temp += "" + i;
jLabel1.setText(temp);
i++;
}
如果您想显示最后一个值,那么简单的显示内容
while(i < 100) {
jLabel1.setText(i);
i++;
}