Я ищу способ сделать следующее:Качели: автоматическое изменение размера текста над кнопкой?
Имейте JDialog с фиксированной шириной.
В нем есть JTextArea (или то, что вы предлагаете лучший компонент ...), который получает текст различной длины (где-то между 0 и 30 линия)
Ниже этого текста есть кнопка.
Диалог автоматически настраивается по высоте, чтобы убедиться, что весь текст и кнопка отображаются.
Самое близкое, что я пришел к решению, это, но JTextArea, похоже, не знает, насколько велико это после того, как автоматическая линия разрывается!
public PleaseResize(){
super();
Container cp = this.getContentPane();
cp.setLayout(new BoxLayout(cp, BoxLayout.Y_AXIS));
JTextArea area = new JTextArea();
area.setColumns(20);
area.setLineWrap(true);
area.setEditable(false);
area.setWrapStyleWord(true);
area.setText("Once upon a midnight dreary, while I pondered, weak and weary, over many a quaint an curious volume of forgotten lore.");
cp.add(area);
cp.add(new JButton("Hallo"));
this.pack();
}
Прокрутка текста, к сожалению не вариант.
Я спросил об этом несколько иначе: Resize Dialog properly after automatic LineWrap, но, возможно, JTextArea - это не тот компонент в конце концов? Я использую неправильный LayoutManager? Все они, похоже, не могут определить, насколько велика будет диалог. Почему JTextArea не может передать свою высоту после добавления строк в текст наружу?
Вот рабочий код:
public PleaseResize() throws BadLocationException {
super();
Container cp = this.getContentPane();
cp.setLayout(new BorderLayout());
JTextArea area = new JTextArea();
area.setColumns(20);
area.setLineWrap(true);
area.setEditable(false);
area.setWrapStyleWord(true);
area.setText("Once upon a midnight dreary, while I pondered, weak and weary, over many a quaint an curious volume of forgotten lore.");
System.out.println(area.getLineCount());
JScrollPane pane = new JScrollPane(area);
cp.add(pane, BorderLayout.CENTER);
cp.add(new JButton("Hallo"), BorderLayout.SOUTH);
this.pack();
this.pack();
}
Упаковка дважды по-прежнему кажется немного странным для меня, но это не решает проблемы изменения размера :).
Я мисс там JScrollPane, отдых в Oracle тащит, как использовать JTextArea/JScrollPane – mKorbel
Используйте осведомленный компонент и CSS HTML, чтобы ограничить ширину. Компонент будет таким же высоким, каким он должен быть. См. [Этот ответ] (http://stackoverflow.com/a/5767825/418556) для демонстрации. –
Я просто серьезно сомневаюсь в моем здравом рассудке: как показывает фиксированный код выше, код Ezequiel, похоже, ничего не делает, поскольку он работает только с вызовом pack() TWICE, а не один раз ... это ошибка Java, что-то Я должен технически не делать, или как это работает? – Layna