Hallo Leute,
ich sitz' seit mehreren Stunden an einem Problem: Ich habe eine Swing-Oberfläche mit folgender Struktur:
Das Canvas ist eine Klasse, die ich mir von JPane abgeleitet habe:
Die Canvas-Klasse möchte ich später noch editieren um Diagramme rein zu zeichnen, darum heißt sie so. Für den Moment soll sie einfach nur eine orange Fläche darstellen.
Nun zum Problem: Wenn ihr mal einen kurzen Blick auf das Bild "withoutScrollPane.png" im Anhang dieses Posts werft, seht ihr, wie ich mir die Sache vorstellen würde - das Canvas füllt den Bereich innerhalb des Tabs voll aus. Nur hätt ich gern noch das ScrollPane drumherum, damit das Canvas auch mal größer werden kann als es der Platz des Tabs zulässt. Das Bild "withScrollPane.png" zeigt das ernüchternde Resultat - da ist *nix* orange. Rein gar nichts. Mein GUI-Builder (Window Builder von Eclipse Indigo) zeigt mir, dass das JScrollPane den vollen Platz des Tabs ausnutzt - nur weigert es sich strikt, auch nur ein kleines oranges Fleckchen vom Canvas anzuzeigen. Ich habe schon versucht, die Minimum- oder Preferred-Sizes zu setzen, oder dem Canvas eine fixe Größe in Pixeln zuzuweisen, alles ohne Erfolg! Und ein JScrollPane lässt ja leider keinen anderen Layout-Manager als das ScrollPaneLayout zu...
Hat irgendjemand einen guten Tip für mich? Bin bislang eigentlich mit allem zurecht gekommen was mir Swing so in den Weg gelegt hat (hab auch schon ScrollPanes mit JTrees verwendet, war kein Problem), aber daran beiße ich mir seit Stunden die Zähne aus...
Gruß,
Alan
______________________________________________________________________________________
EDIT: Ich weiß nicht wie, ich weiß nicht warum - aber so funktioniert es:
Anstelle "JScrollPane#add(Component c)" zu verwenden, übergibt man die Komponente einfach im Konstruktor vom JScrollPane - dann wird das Panel richtig angezeigt und die ScrollBars funktionieren auch soweit ich das beurteilen kann. Nur - warum das so ist.... keine Ahnung... mal Java-API nachlesen gehen...
Tut mir leid dass ich das hier gepostet hab, aber ich hab echt lange nach einer Lösung gesucht, das war jetzt grade purer Zufall
EDIT 2: Wen es interessiert: Offenbar ist es so dass die ".add(Component c)"-Methode nur von einer Klasse weiter oben in der Hierarchie geerbt wurde und sich nicht spezifisch auf das JScrollPane bezieht bzw. nicht spezifisch implementiert wird. Der Konstruktor von JScrollPane (JScrollPane(View Component)) jedoch erstellt für die Komponente eine View, sodass letztendlich alles korrekt abläuft.
ich sitz' seit mehreren Stunden an einem Problem: Ich habe eine Swing-Oberfläche mit folgender Struktur:
Java:
// das ist KEIN Java-Code!
JTabbedPane
|-> JScrollPane
|-> Canvas
Das Canvas ist eine Klasse, die ich mir von JPane abgeleitet habe:
Java:
public class Canvas extends JPanel {
public Canvas() {
this.setBackground(Color.ORANGE);
this.setForeground(Color.ORANGE);
}
}
Die Canvas-Klasse möchte ich später noch editieren um Diagramme rein zu zeichnen, darum heißt sie so. Für den Moment soll sie einfach nur eine orange Fläche darstellen.
Nun zum Problem: Wenn ihr mal einen kurzen Blick auf das Bild "withoutScrollPane.png" im Anhang dieses Posts werft, seht ihr, wie ich mir die Sache vorstellen würde - das Canvas füllt den Bereich innerhalb des Tabs voll aus. Nur hätt ich gern noch das ScrollPane drumherum, damit das Canvas auch mal größer werden kann als es der Platz des Tabs zulässt. Das Bild "withScrollPane.png" zeigt das ernüchternde Resultat - da ist *nix* orange. Rein gar nichts. Mein GUI-Builder (Window Builder von Eclipse Indigo) zeigt mir, dass das JScrollPane den vollen Platz des Tabs ausnutzt - nur weigert es sich strikt, auch nur ein kleines oranges Fleckchen vom Canvas anzuzeigen. Ich habe schon versucht, die Minimum- oder Preferred-Sizes zu setzen, oder dem Canvas eine fixe Größe in Pixeln zuzuweisen, alles ohne Erfolg! Und ein JScrollPane lässt ja leider keinen anderen Layout-Manager als das ScrollPaneLayout zu...
Hat irgendjemand einen guten Tip für mich? Bin bislang eigentlich mit allem zurecht gekommen was mir Swing so in den Weg gelegt hat (hab auch schon ScrollPanes mit JTrees verwendet, war kein Problem), aber daran beiße ich mir seit Stunden die Zähne aus...
Gruß,
Alan
______________________________________________________________________________________
EDIT: Ich weiß nicht wie, ich weiß nicht warum - aber so funktioniert es:
Anstelle "JScrollPane#add(Component c)" zu verwenden, übergibt man die Komponente einfach im Konstruktor vom JScrollPane - dann wird das Panel richtig angezeigt und die ScrollBars funktionieren auch soweit ich das beurteilen kann. Nur - warum das so ist.... keine Ahnung... mal Java-API nachlesen gehen...
Tut mir leid dass ich das hier gepostet hab, aber ich hab echt lange nach einer Lösung gesucht, das war jetzt grade purer Zufall
EDIT 2: Wen es interessiert: Offenbar ist es so dass die ".add(Component c)"-Methode nur von einer Klasse weiter oben in der Hierarchie geerbt wurde und sich nicht spezifisch auf das JScrollPane bezieht bzw. nicht spezifisch implementiert wird. Der Konstruktor von JScrollPane (JScrollPane(View Component)) jedoch erstellt für die Komponente eine View, sodass letztendlich alles korrekt abläuft.
Anhänge
Zuletzt bearbeitet: