B
Bash
Gast
Hallole,
hab in dieser Konstellation (JTextArea in GridBagLayout mit JScrollPane) ein Problem, zu dem ich trotz vielen Experimenten und langem Suchen keine Lösung finden konnte. Vielleicht geht´s ja auch nicht. Aber wenn´s geht, dann weiß hier bestimmt jemand Rat
Ich möchte Panels basteln, die z.B. so aussehen:
Das ist im Prinzip kein Problem und funktioniert auch weit gehend so, wie ich mir das vorstelle, wenn ich keine JScrollPane verwende. D.h. wenn das Fensterle in der Größe verändert wird, dann passt die JTextArea so an das Fenster an, wie ich es mir wünsche.
Dabei gibt es natürlich das Problemchen, dass die Fläche so klein werden kann, dass nicht mehr alles im Panel zu sehen ist.
Nichts leichter als das, dachte ich. Tust du das JPanel halt in eine JScrollPane und der Kittel ist geflickt.
Weit gefehlt. Jetzt wird nämlich die JTextArea unartig und geht mir damit gewaltig auf den Geist.
Wenn die Panel-Größe jetzt verändert wird, dann passt die Größe der JTextArea sich auch an, aber blödsinnig:
Die Höhe schrumpft nur und wächst nie, während sie in der Breite nur wächst, aber nie schrumpft.
Das macht keinen Sinn.
Was kann ich tun
- damit das Panel ScrollBars bekommt, wenn nicht mehr alles drauf passt und
- dass gleichzeitig die JTextArea immer so breit ist wie das Panel und in der Höhe entsprechend wächst/schrumpft?
Würde mich riesig freuen, wenn jemand dafür eine Lösung hätte!
Gruß,
Bash
Hier der Beispiel-Code. Mit der Variablen "mitScrollPane" kann man den Unterschied (mit/ohne JScrollBar) vergleichen.
hab in dieser Konstellation (JTextArea in GridBagLayout mit JScrollPane) ein Problem, zu dem ich trotz vielen Experimenten und langem Suchen keine Lösung finden konnte. Vielleicht geht´s ja auch nicht. Aber wenn´s geht, dann weiß hier bestimmt jemand Rat
Ich möchte Panels basteln, die z.B. so aussehen:
Code:
+-----------------------+
|+---------------------+|
|| ||
|| JTextArea ||
|| ||
|+---------------------+|
|+--------++-----------+|
|| JLabel || JLabel ||
|+--------++-----------+|
+-----------------------+
Das ist im Prinzip kein Problem und funktioniert auch weit gehend so, wie ich mir das vorstelle, wenn ich keine JScrollPane verwende. D.h. wenn das Fensterle in der Größe verändert wird, dann passt die JTextArea so an das Fenster an, wie ich es mir wünsche.
Dabei gibt es natürlich das Problemchen, dass die Fläche so klein werden kann, dass nicht mehr alles im Panel zu sehen ist.
Nichts leichter als das, dachte ich. Tust du das JPanel halt in eine JScrollPane und der Kittel ist geflickt.
Weit gefehlt. Jetzt wird nämlich die JTextArea unartig und geht mir damit gewaltig auf den Geist.
Wenn die Panel-Größe jetzt verändert wird, dann passt die Größe der JTextArea sich auch an, aber blödsinnig:
Die Höhe schrumpft nur und wächst nie, während sie in der Breite nur wächst, aber nie schrumpft.
Das macht keinen Sinn.
Was kann ich tun
- damit das Panel ScrollBars bekommt, wenn nicht mehr alles drauf passt und
- dass gleichzeitig die JTextArea immer so breit ist wie das Panel und in der Höhe entsprechend wächst/schrumpft?
Würde mich riesig freuen, wenn jemand dafür eine Lösung hätte!
Gruß,
Bash
Hier der Beispiel-Code. Mit der Variablen "mitScrollPane" kann man den Unterschied (mit/ohne JScrollBar) vergleichen.
Code:
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
public class JTextAreaProblem
extends JFrame {
private boolean mitScrollPane = false;
public static void main(String[] args) {
new JTextAreaProblem();
}
public JTextAreaProblem() {
super("");
füllen();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 150);
setLocationRelativeTo(null);
setVisible(true);
}
private void füllen() {
JPanel panel = new JPanel();
if (mitScrollPane) {
getContentPane().add(new JScrollPane(panel));
} else {
getContentPane().add(panel);
}
GridBagLayout layout = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
panel.setLayout(layout);
JTextArea textArea = new JTextArea(
"Dies ist ein beliebiger Text," +
" der absichtlich so in die Länge gezogen wurde, " +
" dass er mehrere Zeilen beansprucht.");
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
c.gridx = 0;
c.gridy = 0;
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 2; // andere Werte scheinen nix zu ändern
c.weighty = 0; // dito
c.gridwidth = 2; // GridBagConstraints.REMAINDER hilft auch net
layout.setConstraints(textArea, c);
panel.add(textArea);
c.gridwidth = 1;
c.gridy = 1;
c.weightx = 0;
JLabel links = new JLabel("linkes Label");
links.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
layout.setConstraints(links, c);
panel.add(links);
c.gridx = 1;
c.weightx = GridBagConstraints.REMAINDER;
JLabel rechts = new JLabel("rechtes Label");
rechts.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
layout.setConstraints(rechts, c);
panel.add(rechts);
}
}