J
java2000
Gast
Hallo zusammen, 
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.
Vielen Dank im Voraus für alle Antworten
Gruss
Martin
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