【发布时间】:2014-03-25 09:04:18
【问题描述】:
在示例中,我试图向我的 GUI 添加一个表,然后动态地向其中添加行(以显示进度)。我不明白为什么所有行都同时出现。我的意思是,桌子正在改变,不是吗?谁能给我一个解释?
import java.awt.Component;
public class Main {
public static void main(String[] args) {
// Show GUI
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
GUI gui = new GUI();
gui.setVisible(true);
DefaultTableModel model = new DefaultTableModel(
new String[] { "Column 1", "Column 2" }, 0);
JTable table = new JTable(model);
gui.add(table);
gui.validate();
for (int i = 0; i < 10; i++) {
System.out.println("Row " + i);
model
.addRow(new String[] { "Row", String.valueOf(i) });
// model.fireTableDataChanged();
try {
Thread.sleep(250);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
}
}
class GUI extends JFrame {
private static final long serialVersionUID = 1L;
public GUI() {
setTitle("GUI");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 350, 100);
setLocationRelativeTo(null);
JPanel cp = new JPanel();
cp.setBorder(new EmptyBorder(10, 10, 10, 10));
setContentPane(cp);
}
}
【问题讨论】:
-
不要让 EDT 睡觉 - 永远
-
EDT 是 Event Dispatch Thread 的缩写。现在应该直观地明白为什么会发生这种情况。 :)
-
非常感谢您的提示;我更新了这个例子。我是不是又让事情变得更糟了?! :-)
-
谢谢,我现在就这么做了!
标签: java swing jtable swingworker thread-sleep