V
ViktorW
Gast
Hallo,
Mein GUI für die laufende Sitzung eines Java Chats benutzt ein "null" Layout, welches ich wie folgt setze:
Diesem Panel werden alle weiteren Elemente über eine gesonderte Methode hinzugefügt:
Innerhalb der addComponentsToPane Methode wird unter anderem ein weiteres JPanel für die Ausgabe des Nachrichenverlaufs erzeugt:
Vom ClientController aus wird nun jede Chat Nachricht, als neues JLabel, dem chatScreenArea Panel hinzugefügt:
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 darin, 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:
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.
Mein GUI für die laufende Sitzung eines Java Chats benutzt ein "null" Layout, welches ich wie folgt setze:
Java:
// 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:
Java:
// Add other components
addComponentsToPane(sessionBackground);
Innerhalb der addComponentsToPane Methode wird unter anderem ein weiteres JPanel für die Ausgabe des Nachrichenverlaufs erzeugt:
Java:
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:
Java:
// 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 darin, 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:
Java:
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.