Я создаю пользовательский компонент Java для Amazon Kindle KDK на основе личного профиля Java 1.4.2. Компонент будет содержать текст, который при необходимости будет перекомпонован в несколько строк. Я хочу запросить размер, используя методы getMinimumSize()
, getPreferredSize()
и getMaximumSize()
, которые будут точно содержать текст. Мне нужно будет запросить точную высоту, необходимую на основе ширины, которую компонент получит во время компоновки.
Например, если компонент получит ширину, достаточную для размещения всего текста в одной строке, он будет запрашивать только высоту в одну строку. Но если он получит только ширину, достаточную для размещения текста на трех строках, то он запросит высоту, которая позволит разместить три строки текста.
Кажется, мне нужно сделать макет за два прохода, первый запросить столько ширины, сколько нужно, чтобы уместить текст в одну строку. Затем, как только он получит разрешенную величину ширины, запросите величину высоты для размещения текста в несколько строк, если это необходимо. Как лучше всего узнать, какой будет эта ширина, чтобы получить правильные значения Dimension
в getMinimumSize()
, getPreferredSize()
и getMaximumSize()
?
РЕДАКТИРОВАТЬ: Чтобы уточнить, я бы с удовольствием использовал JTextArea
, но PBP не имеет каких-либо размах и ограниченные компоненты AWT. Kindle KDK сам имеет несколько основных компонентов, включая KTextArea и KLabelMultiline. Проблема в том, что оба они очень глючные и не имеют правильного размера в ситуациях с гибкой компоновкой. Они отлично работают с фиксированными макетами, где все имеет фиксированную область для использования. Но при размещении их в макете, который содержит элементы склеивания и другие текстовые компоненты, которые могут иметь переменные размеры, они не расширяются должным образом для отображения всего своего текста, и эту проблему я пытаюсь решить с помощью пользовательского компонента.