Изменение размера переноса слов JTextArea

Итак, у меня есть JTextArea на JPanel (BoxLayout). У меня также есть заполнитель Box, который заполняет остальную часть JPanel. Мне нужно, чтобы мой JTextArea начинался с высоты одной строки (я могу это сделать), а также расширялся и уменьшался, когда это необходимо.

Перенос слов включен, мне просто нужно настроить его высоту при добавлении/удалении новой строки.

Я пытался использовать documentListener и getLineCount(), но он не распознает переводы строк.

Я хотел бы не возиться со шрифтами, если это возможно.

И НЕТ ПАНЕЛИ ПРОКРУТКИ. Очень важно, чтобы JTextArea всегда отображался полностью.


person Karlovsky120    schedule 18.08.2012    source источник


Ответы (1)


JTextArea имеет довольно специфический побочный эффект, в правильных условиях он может расти сам по себе. Я наткнулся на это случайно, когда пытался настроить простой двухстрочный текстовый редактор (ограниченная длина символов в строке, максимум две строки)...

По сути, при наличии правильного менеджера компоновки этот компонент может расти сам по себе - это действительно имеет смысл, но застало меня врасплох...

Я такой маленькийПосмотри, как я расту

Кроме того, вы можете использовать ComponentListener для отслеживания изменения размера компонента, если вас это интересует...

public class TestTextArea extends JFrame {

    public TestTextArea() {

        setLayout(new GridBagLayout());

        JTextArea textArea = new JTextArea();
        textArea.setColumns(10);
        textArea.setRows(1);
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);

        add(textArea);

        setSize(200, 200);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);

        textArea.addComponentListener(new ComponentAdapter() {

            @Override
            public void componentResized(ComponentEvent ce) {

                System.out.println("I've changed size");

            }

        });

    }


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new TestTextArea();
    }

}
person MadProgrammer    schedule 18.08.2012