/ / JTextArea zmiana rozmiaru słowa - java, swing, jtextarea, zawijanie słów

Zmiana rozmiarów zawijanych słów JTextArea - java, swing, jtextarea, word-wrap

Mam więc JTextArea na JPanel (BoxLayout). Mam też wypełniacz skrzynek, który wypełnia resztę JPanel. Potrzebuję mojego JTextArea, aby rozpocząć z wysokością pojedynczej linii (mogę to zarządzać), i rozwinąć i zredukować, gdy jest to potrzebne.

Zawijanie słów jest włączone, potrzebuję go tylko, aby dostosować jego wysokość po dodaniu / usunięciu nowej linii.

Próbowałem za pomocą documentListener i getLineCount (), ale nie rozpoznaje on nowych wierszy.

Chciałbym uniknąć bałaganu z czcionkami, jeśli to możliwe.

I NIE MA PRZEWIJANIA PRZEWIJANIA. Ważne jest, aby JTextArea była wyświetlana w pełni przez cały czas.

Odpowiedzi:

13 dla odpowiedzi nr 1

JTextArea ma raczej szczególny efekt uboczny, po prawejwarunki, może rosnąć z własnej woli. Natknąłem się na to przypadkiem, kiedy próbowałem skonfigurować prosty dwuliniowy edytor tekstu (ograniczona długość znaków w wierszu, z maksymalnie dwiema liniami) ...

Zasadniczo, biorąc pod uwagę odpowiedni menedżer layoutu, ten komponent może rosnąć z własnej woli - faktycznie ma to sens, ale zaskoczył mnie ...

Jestem taki małySpójrz na mnie rosną

Teraz możesz użyć a ComponentListener aby monitorować, kiedy komponent zmienia rozmiar, jeśli to jest to, co Cię interesuje ...

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();
}

}