Как установить для jTextArea высоту, соответствующую размеру содержащегося в ней текста (чтобы избежать прокрутки) - PullRequest
5 голосов
/ 21 июня 2010

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

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

Ответы [ 4 ]

5 голосов
/ 21 июня 2010

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

4 голосов
/ 21 июня 2010

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

  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;

}
1 голос
/ 23 февраля 2013

Для увеличения или уменьшения высоты JTextArea. Когда текст введен, вызовите getPreferredSize () JTextArea - он даст вам размер, необходимый для отображения всего текста. После этого используйте setPrefferedSize () JScrollPane, чтобы установить размер JTextArea

0 голосов
/ 21 июня 2010

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

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

...