我有一个comboBox jComboBox1,其中包含世界上所有国家/地区的名称...在选择其中一个国家/地区后,第二个组合框jComboBox2将填充jComboBox1中所选国家/地区的所有州。现在,我希望在填充所选国家/地区的状态时显示进度条或“正在加载...”消息,并在完成后自动关闭。
代码就是这样......
public void actionPerformed(ActionEvent e){
if(e.getSource()==jComboBox1){
if(jCombobox1.setSelectedIndex()!=-1){
Country country=new Country();
country.populateStates(jComboBox2,label,this);
//"label" is of type JLabel whose text is is set to show the progress
//"this" refers to the current frame to repaint once label is changed
}
}
}
我以为我可以在框架中使用JLabel,其可见性和文本可以使用setVisible()和setText设置。请注意,“Country”是一个不同的类,我将此标签传递给其方法populateStates,其中我使用label.setText(“加载状态的详细信息:”+ state)并执行frame.repaint()。 (这就是我传递框架对象“this”的原因)。即使这样,标签也不会改变。
但是,选择国家/地区后,标签初始文本中出现的唯一更改是一旦国家/地区的选择结束,就会将其设置为最后一个文本。标签中的中间更改不会出现在GUI中。为什么会发生这种情况?我的方法有什么问题?我是否必须使用其他方法使用线程???如果是这样,怎么??
答案 0 :(得分:3)
首先,由于这似乎是一项长期任务,您需要填写国家/地区状态列表 OUTSIDE EDT。
为此,您可以使用SwingWorker
。 SwingWorker
提供了一些可用于向用户提供反馈的方法。
但是你需要做一些工作才能显示反馈。
答案 1 :(得分:2)