Größe eines JScrollPane dynamisch anpassen?

8

Ich habe zwei Dateien. Einer erweitert JFrame und ein anderer erweitert JPanel. Immer wenn ich die Größe des Rahmens ändere, egal ob maximiert, gezogen oder was auch immer, möchte ich, dass ScrollPane sich an die aktuelle Größe des Rahmens anpasst. Es gibt noch mehr, es gibt eine obere Menüleiste und eine untere Leiste, aber ich habe diese aus Gründen der Einfachheit weggelassen.

Im Wesentlichen möchte ich, dass es wie Notepad funktioniert.

Im Moment verwende ich einen ComponentListener für den Frame, der eine setSize-Methode in der anderen Klasse aufruft. Die setSize-Methode ist nur:

%Vor%

auch, als Referenz:

%Vor%

FYI, es erweitert JPanel wegen der Art, wie ich es zum Rahmen hinzufüge:

%Vor%

Also, was ist der beste Weg, dies zu tun? Danke!

Bearbeiten: Hier ist die Scrollpane-Datei. Es heißt textA in meinem Hauptteil.

%Vor%

und die wichtigsten:

%Vor%     
Nyx 05.06.2011, 02:39
quelle

2 Antworten

6

In Bezug auf den Code, den Sie gepostet haben, werden alle Aufrufe von setSize gelöscht - diese werden im Allgemeinen bei der Verwendung von Layout-Managern nicht berücksichtigt und Sie werden alle Ihre ComponentListener-Zeug los, da es überflüssig ist, da Sie Layout-Manager verwenden Größe ändern Das größte Problem, das ich sehe, ist jedoch, dass Sie Ihrem TextArea-JPanel erlauben, sein Standard-Layout zu verwenden, also FlowLayout, und dadurch wird verhindert, dass das JScrollPane, dessen Größe geändert wird, bleibt. Geben Sie dieser Klasse ein BorderLayout (oder besser: geben Sie einfach ein JScrollPane aus der Klasse zurück), und Sie sind fertig. z.B. mit schnellen Änderungen und Umbenennen von Klassen, um Konflikte mit den Standard-Java-Klassen zu vermeiden,

%Vor%     
Hovercraft Full Of Eels 05.06.2011, 03:06
quelle
3

Standardmäßig verwendet ein JFrame ein BorderLayout (es muss also nicht zurückgesetzt werden). Alles, was Sie tun müssen, ist die JScrollPane zum CENTER des BorderLayout hinzuzufügen und die Größe wird automatisch angepasst.

Und der grundlegende Code wäre:

%Vor%

Ich bin mir nicht sicher, warum Sie den Textbereich zur Mitte hinzufügen.

Es ist nicht erforderlich, setPreferredSize () für eine Komponente zu verwenden oder einen Listener für eine Komponente zu verwenden.

Wenn Sie mehr Hilfe benötigen, müssen Sie ein SSCCE posten.

    
camickr 05.06.2011 02:43
quelle