Ich habe eine JTextArea in einem JPanel. Wie kann ich die JTextArea füllen die gesamte JPanel und Größe ändern, wenn das JPanel die Größe ändert und scrollen, wenn zu viel Text eingegeben wird?Java JTextArea, das automatisch skaliert und scrollt
Antwort
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout()); //give your JPanel a BorderLayout
JTextArea text = new JTextArea();
JScrollPane scroll = new JScrollPane(text); //place the JTextArea in a scroll pane
panel.add(scroll, BorderLayout.CENTER); //add the JScrollPane to the panel
// CENTER will use up all available space
http://download.oracle.com/javase/6/docs/api/javax/swing/JScrollPane.html oder http://download.oracle.com/javase/tutorial/uiswing/components/scrollpane.html für weitere Details über JScrollPane Siehe
Platz der JTextArea innerhalb eines JScrollPane, und legen Sie, dass in den JPanel mit mit einem Layout, das die Größe fixiert. Ein Beispiel mit einem GridBagLayout, könnte zum Beispiel so aussehen:
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
JScrollPane scrollpane = new JScrollPane();
GridBagConstraints cons = new GridBagContraints();
cons.weightx = 1.0;
cons.weighty = 1.0;
panel.add(scrollPane, cons);
JTextArea textArea = new JTextArea();
scrollPane.add(textArea);
Dies ist nur eine grobe Skizze, aber es sollte zeigen, wie es zu tun.
Fast hat dies nicht abgestimmt, weil GridBagLayout für solch ein einfaches Bedürfnis verwendet wird. –
Verwenden Sie niemals GridBagLayout! Noch nie! –
Durch einen langen und kompletten Ärger mit jedem anderen Layout-Manager in Swing verwende ich jetzt fast ausschließlich GridBagLayout. Das ist eher ein Artefakt meiner persönlichen Geschichte als eine Empfehlung. Bitte verwenden Sie den Layout-Manager, der Ihren Anforderungen entspricht. In diesem Fall denke ich, dass die genaue Spezifikation der Gewichte explizit zeigt, dass der Bildlaufbereich alle Änderungen in der Größe absorbiert. Aber es lohnt sich nicht, einen komplexen Layout-Manager für ein einfaches Layout zu verwenden. – Zoe
große antwort danke! –