我的任务是重构一个Java Swing应用程序,我们在这里非常苛刻。我的工作是清理代码并使其更具动态性,因为我们将开始将其与第二个项目一起使用,并且需要能够适当调整。一个窗口的一小部分包含
最初编写此文件的人只使用GridBagLayout JPanel,然后硬编码所有内容,包括表格的标题和行标签,并在动态数据位置留下空的JLabel。收到动态信息时,将使用文本数据调用setText
。我的重构的一部分将导致整个表在尺寸和内容上都是动态的,所以我决定使用GridLayout使表成为子面板,并使用这段代码动态设置内容和尺寸:
public void updateInfoPanel(ArrayList rows) { System.out.println("Updating Info Panel!"); //genericInfo is the new sub panel in question. genericInfo.removeAll(); GridLayout layout = new GridLayout(); layout.setColumns(rows.get(0).length); layout.setRows(rows.size()); genericInfo.setLayout(layout); for(String[] row : rows) { for(String element : row) { genericInfo.add(new Label(element)); } } }
我已经确认每次创建窗口只会调用一次,但整个窗口现在非常缓慢。对于用于在几分之一秒内响应的帧的其他部分中的点击,可能需要> 5秒钟。有谁知道会导致什么?有什么关于GridLayouts的东西,我不明白?
答案 0 :(得分:4)
尝试在EDT上调用此代码。
答案 1 :(得分:3)
看起来你不懂GridLayouts。问题出在其他地方,查看您可能已更改的其他代码,并进行一些分析以确定减速的真正来源。