Незначительный рефакторинг в приложении Java Swing вызывает огромное замедление - PullRequest
3 голосов
/ 10 января 2011

Передо мной была поставлена ​​задача сделать рефакторинг для приложения Java Swing, которое у нас здесь довольно грубое. Моя работа состоит в том, чтобы очистить код и сделать его более динамичным, поскольку мы собираемся начать использовать его со вторым проектом, и он должен быть в состоянии соответствующим образом адаптироваться. Небольшая часть одного окна содержит

  • Кнопка
  • JFormattedTextField, который используется для выбора дат.
  • Таблица JLabels 3X4, отображающая данные.

Человек, который первоначально написал это, просто использовал 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 ]

4 голосов
/ 10 января 2011

Попробуйте вызвать этот код на EDT.

3 голосов
/ 10 января 2011

Нет, похоже, вы понимаете GridLayouts.Проблема в другом месте, посмотрите на другой код, который вы могли изменить, и выполните профилирование, чтобы определить истинный источник замедления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...