鼠标事件处理创建新的填充JFrame

时间:2011-11-19 08:36:15

标签: java swing mouseevent

我看到一些我真的不明白的行为。在第一段代码中,当调用run()时,会弹出JFrame,并填充JPanel。在第二段代码中,JFrame弹出,但JFrame没有填充,窗口似乎没有反应。

final Class g = TowerView.class
final ArrayList<Class> s = (ArrayList<Class>) sorters.clone();
final Quantifiable [] d = InventoryItem.getRandomArray(SIZE); 
run (s, g, d);

这不起作用:

final Class g = TowerView.class
final ArrayList<Class> s = (ArrayList<Class>) sorters.clone();
final Quantifiable [] d = InventoryItem.getRandomArray(SIZE); 
runButton.addMouseListener(new MouseAdapter() {
    @SuppressWarnings("unchecked")
    public void mouseClicked(MouseEvent event) {
        run(s, g, d);  
    }
});

1 个答案:

答案 0 :(得分:4)

您需要在事件侦听器中执行操作,即在另一个线程中运行(s,g,d)命令。

摘自http://docs.oracle.com/javase/tutorial/uiswing/events/generalrules.html

  

关于事件监听器的最重要的规则是   他们应该很快执行。因为所有的绘图和   事件监听方法在同一个线程中执行,很慢   事件监听器方法可以使程序看起来没有响应和缓慢   重新粉刷自己。如果你需要执行一些冗长的操作   事件的结果,通过启动另一个线程(或   以某种方式发送请求到另一个线程)来执行操作。   有关使用线程的帮助,请参阅Swing中的并发。