Ausführen dieses Codes führt zu sehr seltsames Verhalten. Wenn Sie laufen, versuchen Sie, die Größe zu ändern und zu tippen, um zu sehen, was ich meine. JetztHinzufügen von Komponente zu JScrollPane hat seltsames Verhalten
import java.awt.BorderLayout;
import javax.swing.*;
public class FrameWithScrollPanel extends JFrame {
public static void main(String[] args) {
FrameWithScrollPanel myFrame = new FrameWithScrollPanel();
}
public FrameWithScrollPanel()
{
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
JTextArea textArea1 = new JTextArea(5, 30);
JTextArea textArea2 = new JTextArea(5, 30);
JPanel jPanel = new JPanel();
jPanel.setSize(400,400);
jPanel.setLayout(new BorderLayout());
jPanel.add(textArea1, BorderLayout.NORTH);
jPanel.add(textArea2, BorderLayout.SOUTH);
JScrollPane scrollPane = new JScrollPane();
scrollPane.add(jPanel);
getContentPane().add(scrollPane, BorderLayout.CENTER);
pack();
setVisible(true);
}
}
, ersetzen Sie diese 2 Zeilen:
JScrollPane scrollPane = new JScrollPane();
scrollPane.add(jPanel);
Mit dieser einer Zeile und das Verhalten wird als erwartet.
JScrollPane scrollPane = new JScrollPane(jPanel);
Basierend auf der Dokumentation der JScrollPane Konstruktor akzeptiert eine Komponente und damit auch die add(). Warum der Unterschied im Verhalten?
Dank anzuzeigen. Ich habe tatsächlich diesen Link über die JScrollPane-API gelesen, aber es ist einfach nicht untergegangen. Da die meisten Komponenten scheinbar mit add() zu den verschiedenen Panels hinzugefügt werden, ist JScrollPane die einzige, in der add() stattdessen das Viewport ersetzt von Zusätzen dazu? –
@UnhandledException: JScrollPane ist eine komplexe Komponente, die aus mehreren Unterkomponenten besteht. Eine Schlüsselkomponente ist (wie Sie herausfinden) das Ansichtsfenster. Andere Komponentenkomponenten, mit denen Sie vorsichtig sein müssen, einschließlich Fenstern der obersten Ebene wie JFrames, die ebenfalls aus mehreren Komponenten bestehen. Wenn Sie zum Beispiel 'setBackground (Color c)' auf einem JFrame aufrufen, sehen Sie keine Änderung der Hintergrundfarbe. Um den gewünschten Effekt zu erzielen, müssen Sie die Methode im contentPane des JFrames aufrufen. Und wenn Sie 'add (Component comp)' auf einem JFrame aufrufen, fügen Sie dem contentPane tatsächlich hinzu. –