Wil*_*ner 1 java swing jdialog repaint
我有一个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
Run Code Online (Sandbox Code Playgroud)
因此,当单击该按钮时,它会读取每一行并将每个ID放入一个地图中并增加帐户的费用.
完成后,它会将一个JTable放在一个带有信息的JDialog中.但是,只要单击该按钮,用户可能会对程序正在执行的操作感到困惑,因为在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
}
Run Code Online (Sandbox Code Playgroud)
所以我的整体问题很简单: 是否可以告知用户它当前正在计算数据(通过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
}
Run Code Online (Sandbox Code Playgroud)
1) I have a Gui which allows the user to click a button and view the contents of a text file.
2) The issue is that the file can be rather large (100,000+ rows of data) and can take upwards of 15 seconds to read and display in a table.
3)// Psuedo-code
actionPerformed {
create frame- 不是现有的JFrame重用JDialog,肯定会更好CardLayout
display label that lets user know its creating table - 不知道是不是
read text file - 使用SwingWorker和JProgressBar,转换数据并将其放到TableModel中,每50周使用批处理更新TableModel fe,查找JTable的分页,然后你只显示所需的行数,而不是100k,这可能是疯狂的:-)
create map and place values - 可能没用,因为您在TableModel中存储了所有必需的信息
remove label - 不知道是不是
update dialog with table - Jtable可以立即从SwinWorker更新,Swing GUI可以访问所有鼠标或键盘输入,永不等待,也不会在10-15秒延迟
}
| 归档时间: |
|
| 查看次数: |
3195 次 |
| 最近记录: |