Передо мной была поставлена задача сделать рефакторинг для приложения 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, чего я не понимаю?