У меня есть настройка GUI, которая выглядит так:
Он отображает документ и позволяет пользователю редактировать его, добавляя/удаляя JTextAreas
и текст в них.
У меня проблема при попытке открыть документ. Сам документ состоит из слоев JPanels
друг над другом. В графическом интерфейсе никогда не бывает более 6 слоев JPanels
в одной точке.
Поскольку я не знаю, какой будет высота JTextArea
, я должен сделать ее относительно родителя (другими словами, не указывать ее).
Поскольку менеджер компоновки (MigLayout
) не знает точного размера компонента (он относительно родителя), он сначала запрашивает у родителя размер родителя. Этот размер снова неизвестен, и запрашивается родитель родителя и т. д. (до уровня 1 или 2 JPanel). В конце концов, он должен запрашивать у многих компонентов их размер (метод checkParent(Container)
в MigLayout вызывался более 100 000 раз только для приведенного выше примера).
Что мне нужно сделать, так это установить высоту JTextArea
(или JPanel
, в которой он находится) только при открытии документа, поэтому менеджеру компоновки не нужно спрашивать JTextAreas
родителя, вызывая рекурсивный ад.
После открытия документа мне нужно сбросить высоту по умолчанию (поэтому высота настраивается при добавлении/удалении текста).
Я абсолютно не знаю, как это сделать, или, если это путь, я только уверен, что проблема, которую я описал выше, является проблемой.
Несколько примечаний:
- это не ошибка
MigLayout
, я был на форумах (ссылка ниже) - проверьте это (последнее сообщение)
- Я не могу поместить
JScrollPane
вJTextArea
, так как его задача не только хранить информацию, но и точно отображать, сколько места она занимает. - Я могу легко получить высоту
JTextAreas
при сохранении документа, поэтому они будут в моем распоряжении при повторном открытии.
РЕДАКТИРОВАТЬ: документ, на который ссылается этот вопрос, не является «документом», как это используется в JTextAreas и т.п., а «документом», как в пользовательском классе в моей программе (о котором я не упоминал, потому что это не имеет значения, если только это понимается как "документ").