Hi,
habe mal wieder eine kleine Entwurfsfrage.
Ausgangssituation ist ein JPanel,
welches selbst die Breite anpasst.
z.B. mit JLabels die dort drei Punkte setzen.
Allerdings ist die Höhe beliebig (meistens sehr groß).
Packt man das JPanel in einem JScrollPane ist der Viewport ja unendlich groß
und mein JPanel bekommt die von ihm benötigte Breite.
Ich will allerdings,
dass der horizontale Scrollbalen verschwindet und das Panel immer so breit ist,
wie der Viewport.
blendet zwar den Scrollbalken aus,
allerdings bekommt das JPanel nochimmer unendlich viel "Breite".
Ich habe jetzt zwei Ansätze um das Problem zu lösen.
Mein erster Ansatz ist ein ComponentListener auf dem JScrollPane:
Dieser setzt die Breite manuell zurück.
Hat den Vorteil,
dass die Komponente erst mal die maximale Breite annimt und nur bei einem resize,
die Höhe auf 0 gesetzt wird, damit der Scrollbalken verschwindet und der JPanel selbst
die Breite anpassen kann.
Möglichkeit zwei ist gleich die Ausgabe der Größe im JPanel zu manipulieren:
Nachteil hier ist,
das der Frame die Minimum-Breite des JPanels nimmt.
Als dritte Variante fällt mir noch die Implementierung von Scrollable ein ...
Welche Lösung ist eleganter?
Gibt es noch Alternativen?
mfg
Dragonfire
habe mal wieder eine kleine Entwurfsfrage.
Ausgangssituation ist ein JPanel,
welches selbst die Breite anpasst.
z.B. mit JLabels die dort drei Punkte setzen.
Allerdings ist die Höhe beliebig (meistens sehr groß).
Packt man das JPanel in einem JScrollPane ist der Viewport ja unendlich groß
und mein JPanel bekommt die von ihm benötigte Breite.
Ich will allerdings,
dass der horizontale Scrollbalen verschwindet und das Panel immer so breit ist,
wie der Viewport.
Java:
setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER)
blendet zwar den Scrollbalken aus,
allerdings bekommt das JPanel nochimmer unendlich viel "Breite".
Ich habe jetzt zwei Ansätze um das Problem zu lösen.
Mein erster Ansatz ist ein ComponentListener auf dem JScrollPane:
Java:
@Override
public void componentResized(ComponentEvent e) {
panel.setPreferredSize(new Dimension(0, panel.getHeight()));
}
Dieser setzt die Breite manuell zurück.
Hat den Vorteil,
dass die Komponente erst mal die maximale Breite annimt und nur bei einem resize,
die Höhe auf 0 gesetzt wird, damit der Scrollbalken verschwindet und der JPanel selbst
die Breite anpassen kann.
Möglichkeit zwei ist gleich die Ausgabe der Größe im JPanel zu manipulieren:
Java:
panel = new JPanel(new GridBagLayout()) {
@Override
public Dimension getPreferredSize() {
return new Dimension(0, (int) super.getPreferredSize()
.getHeight());
}
};
Nachteil hier ist,
das der Frame die Minimum-Breite des JPanels nimmt.
Als dritte Variante fällt mir noch die Implementierung von Scrollable ein ...
Welche Lösung ist eleganter?
Gibt es noch Alternativen?
mfg
Dragonfire