2016-04-22 8 views
3

Ich habe eine Reihe von JPanel innerhalb einer JFrame. Eines der Panels enthält eine . Im Moment schaffe ich dies wie folgt:Die Größe einer JTextArea

JTextArea = new JTextArea(5, 40); 

Und das gibt mir einen Textbereich, die 5 Reihen von (etwa) 40 Spalten.

Vertikal funktioniert dies wie ich es möchte, der Bereich füllt die gesamte Höhe des übergeordneten Containers - wahrscheinlich, weil das übergeordnete Element das einzige Element in dieser Zeile ist.

Horizontal wird die übergeordnete Breite durch Elemente darunter bestimmt und es ist (normalerweise) breiter als die ist. So habe ich einen Textbereich mit großen Rändern auf beiden Seiten. Was noch schlimmer ist, wenn ich den Rahmen verkleinere, bis der Textbereich genau die Breite des Elterncontainers hat, "springt" er plötzlich und verwandelt sich in einen Textbereich, der 1 Zeile hoch ist und dann die Breite des Elterns ist .

Entschuldigen Sie die grobe Zeichnung unten, die hoffentlich das Problem veranschaulicht.

enter image description here

Kurz gesagt: Wie erstelle ich ein JTextArea, die den maximalen Speicherplatz zu Verfügung füllt immer? (Und wenn möglich mit einer minimalen Breite, nach dem eine Scrollbar erscheint, wenn der Benutzer die Rahmengrößen noch kleiner)

Antwort

1

Im übergeordneten Container des JTextArea (bezeichnet als Panel 1 in der Zeichnung), rufen Sie die Funktion:

panel1.setLayout(new BorderLayout()); 

Als Referenz finden Sie in dieser Dokumentation Seite:

https://docs.oracle.com/javase/7/docs/api/java/awt/BorderLayout.html

Wie Sie nur ein einziges Kind in panel1 haben, die Border Layout-Manager von panel1 wird standardmäßig auf den Textbereich strecken alle verwenden verfügbarer Speicherplatz im übergeordneten Container.

Möglicherweise möchten Sie die Konstruktorparameter mit der Größe Ihrer TextArea entfernen. Die Border sollte kümmern Größen für Sie :)

Sie können das Schwingen verlangen respektiert eine gewisse Mindestgröße für den Textbereich durch den Aufruf:

textArea.setMinimumSize(new Dimension(minimum_width, minimum_height)); 
+0

Das funktioniert ganz gut - danke. – Lieuwe

1

Sie haben Layout-Manager zu verwenden, zum Start oficial Oracle docu about layout managers sehen . Für Ihre Situation, BorderLayout oder GridBagLayout sollte gut funktionieren.

beginnen mit:

panel1.setLayout(new BorderLayout()); 

oder

panel1.setLayout(new GridBagLayout()); 

Mit GridBagLayout Sie mehr preciselly können Sie Layouten (mit BorderLayout haben Sie fünf Bereiche - nicht mehr und nicht weniger). Mit GridBagLayout können Sie kompliziertere Layouts erstellen.