Ich habe mehrere s innerhalb einer JPanel
. Ich verwende eine BoxLayout
, um sie vertikal auszurichten und die Breite des Containers zu füllen.Höhe einstellen aber nicht Breite von JTextArea
Es funktioniert, aber sie scheinen zu erweitern, um die gesamte Höhe als auch zu füllen.
Was ich wirklich will, ist einfach - ein Textbereich, der Text umschließt, wo ich die Breite steuern kann, aber die Höhe dynamisch skalieren kann, wenn mehr Zeilen hinzugefügt werden. Die obige Methode war nur mein bester Versuch. Wenn es eine Lösung gibt, die einen anderen Layout-Manager, eine andere Textkomponente usw. verwendet, funktioniert das.
minimal nachprüfbares Beispiel unten:
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(300, 300));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel textAreas = new JPanel();
textAreas.setLayout(new BoxLayout(textAreas, BoxLayout.Y_AXIS));
JTextArea area1 = new JTextArea();
area1.append("this is a string");
area1.setLineWrap(true);
area1.setWrapStyleWord(true);
textAreas.add(area1);
JTextArea area2 = new JTextArea("and another that is much longer, so that it wraps to the next line");
area2.setLineWrap(true);
area2.setWrapStyleWord(true);
textAreas.add(area2);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(textAreas);
frame.add(scrollPane);
frame.pack();
frame.setVisible(true);
}
Ich habe auf meinem eigenen zu diesem Thema recherchiert, auch bei unterschiedlichem Layout-Manager sucht (http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html) und andere Fragen auf der Website überprüft, aber ich habe nicht hatte viel Glück.
TLDR: Kann ich es so machen, dass jedes Element eines Layouts eine Höhe hat, die auf seinen Inhalt skaliert, aber eine feste Breite? Wenn das so ist, wie?