我的任务是对我们这里的 Java Swing 应用程序进行重构,该应用程序非常笨拙。我的工作是清理代码并使其更具动态性,因为我们将开始在第二个项目中使用它,它需要能够进行适当的调整。一个窗口的一小部分包含
- 一个按钮
- 用于选择日期的 JFormattedTextField。
- 显示数据的 3X4 JLabel 表。
最初编写此代码的人只是使用 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 有什么我不明白的地方吗?
最佳答案
尝试在 EDT 上调用此代码。
关于java - Java Swing 应用程序中的小重构导致速度大幅下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4649268/