2013-09-24 4 views
0

Я хочу установить размер JTextPane в соответствии с размером панели, чтобы при добавлении других панелей он соответствующим образом менялся. Но он просто дает небольшую текстовую панель в центре, и когда я добавляю текст, это соответственно изменяется размер.Как установить размер JTextPane в соответствии с размером JPanel?

JPanel panel = new JPanel(); 
JTextPane txt = new JTextPane(); 
JScrollPane pane = new JScrollPane(); 
pane.add(txt); 
panel.add(pane,BorderLayout.CENTER); 
add(pane); 

В настоящее время jtextpane просто появляется в центре экрана, как небольшая коробка. Я хочу, чтобы он отображался в соответствии с размером панели

+0

Практически, но не совсем полный вопрос - если я помещаю это в метод класса, который расширяет JFrame и запускает его, он заканчивается, не показывая ничего. Я могу добавлять вызовы pack() и setVisible(), но он все еще не делает панели видимыми. Вы вызываете add() в неизвестном классе. Вот почему плакаты так часто просят дать * исполняемый * пример; один, который мы можем вставить в IDE и RUN, чтобы продемонстрировать, в чем проблема. Пока мы находимся в этом, фраза «в соответствии с размером панели» оставляет нам немного догадываться; Вы хотите, чтобы текстовая панель заполнила панель? – arcy

+0

Связанный [пример] (http://stackoverflow.com/a/17510427/1057230) –

ответ

4

JPanel использует FlowLayout по умолчанию, размеры которых в соответствии с их размерами. Вы можете использовать BorderLayout, который будет использовать максимально возможную площадь.

Также использование ограничений, таких как BorderLayout.CENTER, не имеет эффекта, если контейнер фактически не использует BorderLayout. Dont add компоненты к JScrollPane. Это заменит все компоненты в представлении компонента. Вместо того, чтобы установить JTextPane как ViewPortView, например

JPanel panel = new JPanel(new BorderLayout()); 
JTextPane txt = new JTextPane(); 
JScrollPane pane = new JScrollPane(txt); 
// pane.add(txt); remove 
panel.add(pane, BorderLayout.CENTER); 

Read:

+0

Действительно ли это редактирование: 'JPanel panel = новый JPanel (новый GridLayout());' now panel использует 'GridLayout', хотя' panel.add (панель, BorderLayout.CENTER); 'здесь похоже, что используется' BorderLayout' !!! –

+1

Упс, слишком много измельчения и смены, исправлено - спасибо :) – Reimeus

3

Вы добавили pane дважды. Добавьте panel на свою базу (a JFrame?) И не забудьте установить JPanel для использования BorderLayout.

+1

Опечатка ... я имел в виду добавить (панель) – UsamaMan