Java Swing应用程序中的次要重构导致巨大的减速

时间:2011-01-10 16:57:03

标签: 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的东西,我不明白?

2 个答案:

答案 0 :(得分:4)

尝试在EDT上调用此代码。

答案 1 :(得分:3)

看起来你不懂GridLayouts。问题出在其他地方,查看您可能已更改的其他代码,并进行一些分析以确定减速的真正来源。