java - Java Swing 应用程序中的小重构导致速度大幅下降

标签 java swing

我的任务是对我们这里的 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/

相关文章:

java - 平方和计算

java - 将一个java项目(我在里面用JLayer 1.0.1来播放mp3)转为可运行的jar文件

java - (Java)统计程序

java - 区分OnDismiss和dialogfragment的方法 - Android Studio

java - 如何有效地为JPanel.add(component) 方法添加回调方法?

java - JComponent 调整大小时消失?

java - 使用用户输入从 JFrame 运行 shell 脚本 (Swing)

java - 为什么我的 Paint surface 方法不起作用?

java - 安卓 Volley : where add retry policy and timeout?

java - 使用 Junit 或 Jmock 断言 java beans 数组具有唯一的属性值