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

StackOverflow https://stackoverflow.com/questions/3081210

Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

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

  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;

}

Увеличить или уменьшить высоту jtextarea. Когда текст введен, вызовите getPrefredsize () jtextarea- это даст вам размер необходимый для отображения всего текста. После этого используйте SetPrefheredsize () jscrollepane, чтобы установить размер jtextarea

Ну, прежде всего: это jtextarea не jtextarea.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top