MrSchmidtdtdtdt: Scrollbars in dynamischem JPanel?

Hallo,

Mein GUI für die laufende Sitzung eines Java Chats benutzt ein "null" Layout, welches ich wie folgt setze:

  // Create the backgound  
  PanelBackground sessionBackground = new PanelBackground(new ImageIcon(...).getImage());  
  sessionBackground.setBorder(BorderFactory.createEmptyBorder());  
  sessionBackground.setLayout(null);  
	  
  // Add the background  
  getContentPane().add(sessionBackground, BorderLayout.CENTER);

Diesem Panel werden alle weiteren Elemente über eine gesonderte Methode hinzugefügt:

  
  // Add other components  
  addComponentsToPane(sessionBackground);

Innerhalb der addComponentsToPane Methode wird unter anderem ein weiteres JPanel für die Ausgabe des Nachrichenverlaufs erzeugt:

  
  Insets insets = pane.getInsets();  
  
  // Chat screen field  
  chatScreenArea = new JPanel();  
  chatScreenArea.setLayout(new BoxLayout(chatScreenArea, BoxLayout.Y_AXIS));  
  Dimension size = chatScreenArea.getPreferredSize();  
  chatScreenArea.setOpaque(true);  
  chatScreenArea.setBorder(BorderFactory.createEmptyBorder());  
  chatScreenArea.setBounds(15 + insets.left,  
    		            13 + insets.top,  
    		           706 + size.width,  
    		           395 + size.height);  
  pane.add(chatScreenArea);

Vom ClientController aus wird nun jede Chat Nachricht, als neues JLabel, dem chatScreenArea Panel hinzugefügt:

  // Post message  
  JLabel chatLine = new JLabel(date + message);  
  chatScreen.getChatScreenArea().add(chatLine);  
  chatScreen.pack();

Das Ganze funktioniert soweit auch wunderbar, bloß ist besagte chatScreenArea irgendwann voll und alle weiteren chatLine Labels verschwinden unterhalb des Anzeigebereichs.
Ich möchte gerne ein JScrollPane hinzufügen um die Nachrichtenanzeige durch Scrollbars zu verlängern.

Mein Ansatz besteht bislang das JScrollPane eine Ebene vor dem chatScreenArea-Panel zu erzeugen, auf der exakt selben Position, mit identischen Maßen und die chatArea über dieses neue Panel zu adden:

  JScrollPane scrollPane = new JScrollPane(chatScreenArea);  
  Dimension size = scrollPane.getPreferredSize();  
  scrollPane.setBounds(15 + insets.left,  
                       13 + insets.top,  
                      706 + size.width,  
                      395 + size.height);  
  
  ...  
  chatScreenArea erzeugen  
  ...  
  
  scrollPane.add(chatScreenArea);  
  pane.add(scrollPane);

Das Ganze funktioniert nun leider nicht so, wie ich es mit vorstelle.
Besagtes JScrollPane wird zwar hinter dem ursprünglichen chatScreenArea-Panel erzeugt, ist jedoch weder scrollbar, noch können weiterhin JLabels auf der chatScreenArea erstellt werden.
Unter anderem bekomme ich jede Menge Exceptions, welche aber wohl auf das BoxLayout der chatScreenArea zurück zu führen sind..

Ich gebe zu, die Funktionsweise des JScrollPanels noch nicht so recht verstanden zu haben.. kann mir jemand sagen, was ich falsch mache?

Danke.

  1. Hi,

    bitte respektiere, dass Doppelpostings hier [gut begründet] unerwünscht sind, und bleibe in deinem bestehenden Thread, (JAVA/JSP) Dynamisches JPanel mit JScrollBar versehen?

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?