我的任务是对我们这里有的Java Swing应用程序进行重构。我的工作是清理代码并使代码更具动态性,因为我们将开始在第二个项目中使用它,并且它需要能够适当地进行调整。一个窗口的一小部分包含

  • 一个按钮
  • 一个JFormattedTextField,用于选择日期。
  • 显示数据的JLabel 3X4表。

  • 最初编写此代码的人仅使用GridBagLayout JPanel,然后对所有内容进行硬编码,包括表的标题和行标签,并将空的JLabel保留在动态数据位置。接收到动态信息时,将使用文本数据调用setText。重构的一部分将导致整个表在维度和内容上都是动态的,因此我决定使该表成为带有GridLayout的子面板,并通过以下代码动态设置内容和维度:

    公共无效updateInfoPanel(ArrayList行){
    System.out.println(“正在更新信息面板!”);
    // genericInfo是有问题的新子面板。
    genericInfo.removeAll();
    GridLayout layout = new GridLayout();
    layout.setColumns(rows.get(0).length);
    layout.setRows(rows.size());
    genericInfo.setLayout(layout);
    for(String [] row:行){
    for(String element:row){
    genericInfo.add(new Label(element));
    }
    }
    }

    我已经验证过,每次创建窗口仅一次调用一次,但是整个窗口现在变得非常缓慢。响应帧中其他部分过去仅需几分之一秒响应的点击可能需要5秒钟以上的时间。有人知道会导致什么吗?关于GridLayouts有我不了解的东西吗?

    最佳答案

    尝试在EDT上调用此代码。

    09-20 08:18