【发布时间】:2012-04-11 20:06:40
【问题描述】:
我有一个 GUI,它允许用户单击按钮并查看文本文件的内容。问题是文件可能相当大(超过 100,000 行数据),读取和显示在表格中可能需要 15 秒以上。
文本文件格式示例:
*/
Account ID : 8 digit number
Money Charged : Integer < $10
Values separated by \t
/*
Account Id Money Charged
---------- --------------
731298 3
359412 5
624937 1
所以当按钮被点击时,它会读取每一行并将每个 id 放入 map 并增加账户的费用。
一旦完成,它将在 JDialog 中放置一个带有信息的 JTable。但是,一旦单击按钮,用户可能会对程序正在做什么感到困惑,因为我在 JDialog 和 JTable 出现之前经历了超过 10-15 秒的延迟。
那么有没有办法让 JDialog 出现一个字符串,让用户知道它正在创建表? (我认为可以使用 JDialog 方法之一来完成,例如 repaint() 或 validate,但这些方法似乎没有奏效。
这是我认为应该完成的顺序:
//Psuedo-code
actionPerformed {
create frame
display label that lets user know its creating table
read text file
create map and place values
remove label
update dialog with table // unsure what to do to update it properly
}
所以我的总体问题很简单: 是否可以通知用户它当前正在计算数据(通过 JDialog 中的 JLabel),一旦读取数据,显示 JTable(通过更新 JDialog)?
如果需要,我可以提供来源。虽然不确定它是否真的需要
编辑
public void actionPerformed(ActionEvent event) {
JFrame frame = new JFrame();
JDialog dialog = new JDialog(frame, "Account Charges", true);
JLabel label = new JLabel("Currently calculating the charges")
dialog.getContentPane().add(label); //add waiting label
dialog.setVisible(true);
readData(myFile); //read file and create table
dialog.getContentPane().remove(label); //waiting label no longer needed
dialog.getContentPane().add(myJtable); //update dialog with the table
}
【问题讨论】:
-
If needed, I can provide source. Not sure it's really needed though,没错,天上有星星之类的选项,哪个是你的,请用SSCCE编辑你的问题 -
@mKorbel 我以为有人会要求 SSCCE,这就是我添加最后一行的原因。我仍然认为不需要回答是否能够使用新信息更新 JDialog。但我会整理一个简单的程序,这样就有一个 SSCCE
-
由你决定,当然你不能那样做,因为问题描述得很好:-)
-
@Devon_C_Miller 我认为进度条对于我想做的事情来说有点太花哨了。我只是想显示一个字符串/标签。原因是,有时创建和加载表需要 100 毫秒而不是 15 秒以上
标签: java swing repaint jdialog