2013-04-05 2 views
0

У меня есть настройки графического интерфейса пользователя, который выглядит следующим образом:GUI здания Проблема

example

Он отображает документ и позволяет пользователю редактировать его путем добавления/удаления JTextAreas и текст в них.

У меня возникли проблемы при попытке открыть документ. Сам документ состоит из слоев JPanels друг над другом. В одной точке графического интерфейса не более 6 слоев JPanels.

Поскольку я не знаю, какова будет высота JTextArea, я должен сделать ее относительно родителя (другими словами, не указывать ее).

Поскольку диспетчер компоновки (MigLayout) не знает точный размер компонента (это относительно родителя), он сначала запрашивает у своего родителя размер родителя. Этот размер снова неизвестен, и родительский родитель задан и так далее (до уровня 1 или 2 JPanel). В конце концов, он должен задать много компонентов для своего размера (метод checkParent(Container) в MigLayout был вызван более 100 000 раз только для примера выше).

Что мне нужно сделать, это установить высоту JTextArea (или JPanel, что он находится в) только тогда, когда открывается документ, поэтому менеджер макет не должен спросить JTextAreas родителей, в результате чего рекурсивный ад ,

После открытия документа мне необходимо сбросить высоту до значения по умолчанию (поэтому высота настраивается при добавлении/удалении текста).

У меня нет абсолютного представления о том, как это сделать, или если это путь, я уверен, что описанная выше вещь является проблемой.

Несколько нот:

  • это не MigLayout ошибка, я был на форуме (ссылка ниже)
  • check this out (the last post)
  • Я не могу поставить JScrollPane в JTextArea своей задачей не только хранить информацию, но и точно отображать, сколько места она занимает
  • Я могу легко получить высоту JTextAreas при сохранении документа, тем самым имея их в моем распоряжении, когда openin г он снова

EDIT: Документ ссылается на этом вопросе не является «документом» в качестве штуковины, используемой в JTextAreas и похож, но «документ», как и в пользовательском классе в моей программе (я Жду» так как это не имеет значения, если только это не понимается как «документ»).

ответ

1

Поскольку ваш Document моделирует иерархическую структуру, вам нужно дерево. Поскольку для вашего интерфейса требуется как элемент управления, так и представление для каждого узла, вам нужна таблица. Outline, видел here, может быть подходящим выбором. Ваш DocumentTreeModel будет содержать ссылку на корень документа Element, так же как в примере FileTreeModel содержится ссылка на корень File. Ваш RowModel будет включать JLabel, a JCheckBox и JTextArea.

+0

Мне нужно, чтобы моя программа была такой же, как и на прилагаемом рисунке, так что это не будет работать ... – Karlovsky120

+0

Извините, я не знаю о существующем представлении «Документ», которое появляется ближе. – trashgod

+0

Я не обязательно ищу альтернативный вид, насколько я ищу решение проблемы с рекурсивным изменением GUI ... – Karlovsky120

Смежные вопросы