JScrollpane verhält sich sprunghaft bei Grössenänderungen

Status
Nicht offen für weitere Antworten.
J

java2000

Gast
Hallo zusammen, :D
Ich habe ein Layout Problem. Ich habe ein JFrame mit mehreren Komponenten, darunter ein JScrollPane, dessen Grösse sich etwas erstaunlich verhält. Das Frame enthält im Teil Borderlayout.WEST ein JPanel, das diese JScrollPane enthält. In dieser Scrollpane befindet sich ein JPanel mit einer bestimmten Grösse, die erst zur Laufzeit bekannt sein wird.
Startet man nun die Applikation, so erscheint das Frame mit der JScrollpane und die Scrollbars sind sichtbar. Das JPanel innerhalb hat die gewünschte Breite von hier im Beispiel 224 Pixel. Wenn das Fenster nun vergrössert wird, verschwinden die Scrollbars und, für mich unverständlicherweise, springt die Breite des Panels auf 239 Pixel. :?:
Wie kommt das und wie kann ich das vermeiden, so dass die Scrollpane immer die gleiche Grösse behält?

Ich habe natürlich alles unnötige aus dem JFrame gekippt und habe hier nur noch das Gerippe mit dem Problem.

Code:
import java.awt.*;
import javax.swing.*;

public class ScrollPaneProblem extends JFrame {

	public ScrollPaneProblem() {
		super("Problem Frame");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLayout(new BorderLayout());

		MyPanel myPanel = new MyPanel();
		add(myPanel, BorderLayout.WEST);
		// andere Komponenten kommen auf BorderLayout.CENTER und BorderLayout.EAST

		setSize(300,265);
		setLocationByPlatform(true);
	}

	// Die Komponente, die im Westen liegt
	private class MyPanel extends JPanel {

		private MyPanel() {

			// Das Panel im Innern
			JPanel panel = new JPanel() {
				public void paintComponent(Graphics g) {
					super.paintComponent(g);
					g.drawString("Width: " + getSize().width, 5, 15);
				}
			};
			panel.setBackground(Color.BLUE);
			
			// panel soll immer die Grösse length,length haben
			int length = 224; // Der genau Wert is erst zur Laufzeit bekannt
			panel.setPreferredSize(new Dimension(length, length));
			panel.setMaximumSize(new Dimension(length, length));

			final JScrollPane scrollpane = new JScrollPane(panel);

			setLayout(new BorderLayout());
			add(scrollpane,BorderLayout.CENTER);
			// andere Komponenten werden in dieses Panel eingefügt
		}
	}

	public static void main(String[] args) {
		ScrollPaneProblem frame = new ScrollPaneProblem();
		frame.setVisible(true);
	}
}

Vielen Dank im Voraus für alle Antworten

Gruss
Martin
 
G

Guest

Gast
Funktioniert super :D
Vielen Dank

Wenn ich eine Dimension mit einer 0 übergebe, heisst die 0 wohl, dass es sich die Komponente selbst aussuchen kann?
 
J

java2000

Gast
In Ordnung, das leuchtet mir ein. Aber allgemein gibt es keinen Trick um die Komponente sich eine Breite oder Höhe selbst aussuchen zu lassen? Also z.B. wenn ich nur eine minimalWidth, preferedWidth oder maximumWidth definieren will, mir die Höhe aber völlig egal ist.
 

Marco13

Top Contributor
Das mit dem "selbst aussuchen" ist so eine Sache.

Wenn man für ein JPanel nun eine PreferredSize explizit setzt (mit setPreferredSize), dann wird bei JEDEM nachfolgenden Aufruf von getPreferredSize immer die zurückgegeben, die man gesetzt hat.

Wenn man die Größe nicht explizit setzt, dann liefert getPreferredSize auf einem JPanel standardmäßig eine Größe zurück, die berechnet wird auf Basis von
- dem LayoutManager des JPanels
- der PreferredSize der Components, die im JPanel liegen.

Wenn man ein JPanel hat, in dem z.B. mit GridLayout(1,1) ein JLabel drin liegt, dann liefert getPreferredSize praktisch die Größe des JLabels (+Rand oder andere Details).

Was du jetzt willst, ist eine Mischung aus "explizitem Setzen" und dem automatischen Berechnen.

Wenn man NUR die Breite festlegen will, aber die Berechnung der beworzugten Höhe so machen lassen will, wie sie standardmäßig ist, muss man ein bißchen tricksen. Man sollte sowas nicht zu exzessiv einsetzen, aber man kann dann prinzipiell sowas machen wie
Code:
JPanel panel = new JPanel(new GridLayout(1,1))
{
    @Override
    public Dimension getPreferredSize()
    {
        Dimension dim = super.getPreferredSize();

        // Bevorzugte Breite ist 666. Die Höhe ist die automatisch berechnete "Standardhöhe"
        dim.width = 666;

        return dim;
    }
};

panel.add(new JLabel("bla"));

// Dieser Aufruf liefert jetzt eine PreferredSize, deren BREITE immer 666 ist,
// deren Höhe aber vom Inhalt des Panels (in diesem Fall: Dem Label) abhängt
Dimension p = panel.getPreferredSize();
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
B Swing JScrollPane scrollt nicht AWT, Swing, JavaFX & SWT 10
P JTextarea (in JScrollPane) zeigt nur die beiden letzten Einträge an? AWT, Swing, JavaFX & SWT 0
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
E wie in JScrollPane auf JTextArea zugreifen AWT, Swing, JavaFX & SWT 12
N Swing JScrollPane mit Tastatur bedienen? AWT, Swing, JavaFX & SWT 0
F JScrollPane anzeige AWT, Swing, JavaFX & SWT 7
K Swing JScrollPane wird nicht angezeigt wenn man Components darstellt. AWT, Swing, JavaFX & SWT 2
M Swing JPanel in JScrollPane AWT, Swing, JavaFX & SWT 3
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
P Swing JEditorPane in Kombination mit JScrollPane AWT, Swing, JavaFX & SWT 29
S Swing jScrollPane - pro Eintrag der Liste, die jCheckBoxes Speichern die in dem Eintrag aktiviert wurden AWT, Swing, JavaFX & SWT 2
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
D JScrollPane in JTabbedPane AWT, Swing, JavaFX & SWT 3
MaxG. Swing JScrollPane AWT, Swing, JavaFX & SWT 10
Soloeco Swing JScrollPane AWT, Swing, JavaFX & SWT 6
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
J JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 5
B LayoutManager GridBagLayout und JScrollPane AWT, Swing, JavaFX & SWT 5
Thallius JScrollPane Scrollpos setzen nach Neuzeichnen AWT, Swing, JavaFX & SWT 3
P MalProgramm mit JScrollPane und Canvas AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
U JScrollPane -> JTabbedPane u.A. AWT, Swing, JavaFX & SWT 3
A Layout-Manager, JScrollPane, ... Chaos AWT, Swing, JavaFX & SWT 5
V JScrollPane im zur Laufzeit verändernden JFrame AWT, Swing, JavaFX & SWT 0
W Swing Größenänderung vom JPanel im JScrollPane und anschließendes positionieren AWT, Swing, JavaFX & SWT 2
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
G JTextArea mit JScrollPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
Bluedaishi JScrollpane AWT, Swing, JavaFX & SWT 0
L JScrollPane scrollt nicht !! AWT, Swing, JavaFX & SWT 3
F JScrollPane Position setzen (x=0, y=0) AWT, Swing, JavaFX & SWT 2
R JScrollPane überdeckt JPanel? AWT, Swing, JavaFX & SWT 7
H JTree in JScrollPane passt sich nicht an Größe von JPanel an AWT, Swing, JavaFX & SWT 2
S JScrollPane und BorderLayout AWT, Swing, JavaFX & SWT 1
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
W Swing JScrollPane für mein Fenster AWT, Swing, JavaFX & SWT 4
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
F JTable mit JScrollPane AWT, Swing, JavaFX & SWT 4
I JPanel in JScrollPane verkleinert sich leider nicht .... AWT, Swing, JavaFX & SWT 2
G JScrollPane bricht am Ende der Anzeige nicht um AWT, Swing, JavaFX & SWT 2
J Swing JTextPane mit JScrollPane auf JPanel scrollen nicht AWT, Swing, JavaFX & SWT 6
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
B Swing JPanel in JScrollPane einfügen AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Transparentes JScrollPane AWT, Swing, JavaFX & SWT 0
S 3D-Grafik 3d Grafik auf einem JPanel oder im JScrollPane AWT, Swing, JavaFX & SWT 1
R Ändern Default-Verhalten von JScrollpane in einer JScrollpane AWT, Swing, JavaFX & SWT 1
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
A JScrollPane - ScrollBar Buttongröße verändern AWT, Swing, JavaFX & SWT 1
J Bilder auf JPanel (im JScrollPane) nacheinander laden AWT, Swing, JavaFX & SWT 0
A Swing JScrollPane Problem AWT, Swing, JavaFX & SWT 6
H Swing JScrollPane mit "viel Inhalt" scrollt zu langsam (inkl. See-For-Yourself.jar :D) AWT, Swing, JavaFX & SWT 2
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane in JScrollPane - Problem AWT, Swing, JavaFX & SWT 3
K Bug in JScrollPane? AWT, Swing, JavaFX & SWT 4
T Swing JScrollPane Farbe der Scrollbar AWT, Swing, JavaFX & SWT 3
M JScrollPane Header AWT, Swing, JavaFX & SWT 3
G JScrollPane über JScrollPane AWT, Swing, JavaFX & SWT 2
V LayoutManager JScrollPane verwirft Elementanordnung AWT, Swing, JavaFX & SWT 3
B JScrollPane Problem AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane AWT, Swing, JavaFX & SWT 7
H cardlayout und jscrollpane AWT, Swing, JavaFX & SWT 14
F 2D-Grafik Skalieren der Scrollbars beim Zoomen einer JScrollPane AWT, Swing, JavaFX & SWT 4
B JScrollPane Horizontal klappt nicht. AWT, Swing, JavaFX & SWT 4
G JScrollPane reagiert nicht auf Änderung der JPanel-Größe AWT, Swing, JavaFX & SWT 4
C jPanel auf jScrollPane zentrieren AWT, Swing, JavaFX & SWT 3
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
U Swing JPane und JScrollpane in JSplitpane-Seite: Scrollen funktioniert nicht AWT, Swing, JavaFX & SWT 3
A Swing Korrekte JTable.rowAt(point) für JTable in JScrollPane AWT, Swing, JavaFX & SWT 5
D Label über JScrollPane AWT, Swing, JavaFX & SWT 3
S JScrollPane reagiert nicht AWT, Swing, JavaFX & SWT 3
X JScrollPane zu JTable hinzufügen AWT, Swing, JavaFX & SWT 16
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
D LayoutManager JScrollPane mit dynamischem Inhalt AWT, Swing, JavaFX & SWT 8
P Swing JScrollpane AWT, Swing, JavaFX & SWT 2
B JScrollPane scrollt nicht immer automatisch AWT, Swing, JavaFX & SWT 2
V Swing JScrollPane Viewport verschieben AWT, Swing, JavaFX & SWT 2
J JScrollPane Probleme AWT, Swing, JavaFX & SWT 3
S Swing JScrollPane verliert Scrollbars AWT, Swing, JavaFX & SWT 5
D Swing JTable in JScrollpane beliebig verbreitern AWT, Swing, JavaFX & SWT 5
A Swing Anzeige Text in JScrollpane AWT, Swing, JavaFX & SWT 8
J Swing Unteren Abstand für JTable in JScrollPane festlegen AWT, Swing, JavaFX & SWT 10
xehpuk Swing Line-wrapping von JTextPane (in JScrollPane) AWT, Swing, JavaFX & SWT 3
M JScrollPane Problem AWT, Swing, JavaFX & SWT 6
S Swing JScrollpane und ViewPort AWT, Swing, JavaFX & SWT 4
D JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 12
X JScrollPane funzt net... AWT, Swing, JavaFX & SWT 5
H jscrollpane AWT, Swing, JavaFX & SWT 12
RELAXccc Swing JTree + JScrollPane, refresh Problem AWT, Swing, JavaFX & SWT 17
A Problem mit JScrollPane in einer JScrollpane AWT, Swing, JavaFX & SWT 4
B JScrollPane Problem AWT, Swing, JavaFX & SWT 25
T Swing JScrollPane- und Tabelle-Header Problem AWT, Swing, JavaFX & SWT 25
P Swing JScrollPane-Inhalt: Grösse anpassen AWT, Swing, JavaFX & SWT 6
G Swing Höhe des View eines JScrollPane fest auf Höhe des JScrollPane setzen! AWT, Swing, JavaFX & SWT 4
A JScrollPane AWT, Swing, JavaFX & SWT 16
C Swing JScrollPane und Scroll-Geschwindigkeit AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben