Как установить jTextArea, чтобы иметь высоту, которая соответствует размеру текста, это содержит (для предотвращения полос прокрутки)

Эта проблема выглядит тривиальной, но я не могу найти решение.

Когда я создаю форму, она содержит a JTextArea. Я хочу поместить большой постоянный текст в него. Если текст, говорят, что 1 000 строк долго, я хочу мой JTextArea быть 1 000 строк высоко (чтобы быть достаточно большим для отображения всего текста без полос прокрутки). JTextArea в панели, которая может иметь полосу прокрутки, таким образом, это не проблема, когда это становится слишком большим (существует два JTextArea в той панели.. что-то как в различном инструменте). Кто-либо знает, как я могу достигнуть этого?Спасибо.

5
задан mKorbel 28 December 2012 в 08:41
поделиться

3 ответа

BorderLayout будет обрабатывать полосу прокрутки прямо из коробки, если вы просто поместите свою JTextArea в JScrollPane , прежде чем добавлять ее в свою JPanel . FlowLayout , с другой стороны, этого не делает. Он не будет отображать полосу прокрутки, если, как намеревается @Xorty, вы не вызовете setPreferSize () на своем JScrollPane и не зададите ему желаемое измерение.

5
ответ дан 13 December 2019 в 22:01
поделиться

Вы также можете использовать что-то вроде этого ( ограниченная ширина, высота зависит от текста, полезно при отображении информационных сообщений):

  public JTextArea createTextAreaFitToText(String message, Dimension minimalSize){

        JTextArea aMessagePanel = new JTextArea();
        aMessagePanel.setText(message);

        /*for modelToView to work, the text area has to be sized. It doesn't matter if it's visible or not.*/
        aMessagePanel.setPreferredSize(minimalSize);
        aMessagePanel.setSize(minimalSize);            

        Rectangle r = aMessagePanel.modelToView(aMessagePanel.getDocument().getLength()); 

        Dimension d = new Dimension(minimalSize.width, r.y + r.height);
        aMessagePanel.setPreferredSize(d);
        return aMessagePanel;

}
4
ответ дан 13 December 2019 в 22:01
поделиться

Ну, во-первых: это JTextArea, а не jTextArea.

Теперь - поместите JTextArea в JScrollPane. Когда текст введен, вызовите getPreferedSize() JScrollPane - это даст вам точный размер, необходимый для отображения всего текста. Кроме того, я никогда не использовал другой LayoutManager, кроме 'Free Design' из NetBeans Swing builder - поэтому я не уверен, как поведут себя другие LayoutManager'ы.

0
ответ дан 13 December 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: