ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
610
610
EMPFEHLEN
-
Hallo,
habe ein kleines Problem mit dem Flowlayout. Bin mir nicht sicher ob es einfach ein Denkfehler ist oder ob ich das Ganze prinzipiell zu einfach sehe.
Ich habe ein JPanel (Flowlayout) in dem ich weitere JPanels für bestimmte Abteilungen hinzufüge. Die Abteilungs-Panels sind ebenfalls im Flowlayout und enthalten die einzelnen Arbeitsplätze von Mitarbeitern. Die Abteilungs-Panels lassen sich auf- und zuklappen. Ziel ist, dass sich die einzelnene Mitarbeiter sauber vertikal durchscrollen lassen und alles möglichst kompakt ist. Ich habe zwei Bilder angefügt, welche die Situation wohl besser beschreiben.
Im Moment hab ich alles noch mit einem BorderLayout verbunden. Jedoch passt sich die Größe der JPanels nicht so an wie ich mir das in den Bilder vorstelle. Was fehlt mir, um das Ganze Konstrukt dynamischer zu gestalten? Habe schon mit "setPreferedSize" experimentiert. Aber sobald ich die Fenstergröße mit der Maus ändere, stimmen die dort eingetragenen Maße nicht mehr mit der Realität überein.
Vielleicht hat ja jemand einen Tipp! Danke******
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
private JPanel getJPanel() { if (jPanel == null) { jPanel = new JPanel(); jPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); jPanel.setLayout(new BorderLayout()); // jPanel.setLayout(new BoxLayout(getJPanel(), BoxLayout.Y_AXIS)); jPanel.add(getGroupStorage(), BorderLayout.NORTH); jPanel.add(getGroupLogistic(), BorderLayout.CENTER); jPanel.add(getGroupDefault(), BorderLayout.SOUTH); jPanel.addComponentListener(new java.awt.event.ComponentAdapter() { public void componentResized(java.awt.event.ComponentEvent e) { System.out.println("componentResized()" + getSize()); groupLogistic.repaint(); groupLogistic.validate(); } }); } return jPanel; }
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
private JPanel getGroupLogistic() { if (groupLogistic == null) { groupLogistic = new JPanel(); groupLogistic.setBorder(BorderFactory.createTitledBorder(null, "Logistic dep.", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, myFont, myColor)); groupLogistic.add(newDevice( icon, "5 devices"), null); groupLogistic.add(ex1, null); groupLogistic.add(ex2, null); groupLogistic.add(ex3, null); groupLogistic.add(ex4, null); groupLogistic.add(ex5, null); groupLogistic.setLayout(new FlowLayout(FlowLayout.LEFT, 30, 30)); groupLogistic.setBackground(Color.white); } return groupLogistic; }
-
18.04.11 11:13 #2
Ich denke mal du meinst auf dem ersten Bild eher, dass die Krokos in eine neue Zeile sollen, damit keine horizontale Scrollbar auftaucht. Brauchst du die ScrollPane eigentlich unbedingt oder gehts auch ohne? Weil ohne ScrollPane macht das FlowLayout was es soll. Andernfalls musst du halt bei dem entsprechenden Panel (in diesem Fall groupLogistic) mit setPreferedSize() dafür sorgen.
Das zweite Bild versteh ich allerdings nicht so ganz. Laut dem Bild soll das untere Panel dann eine Stufe nach oben in den leeren Platz rechts rutschen? Wenn ja, wozu? Lass es doch so, ist zudem auch übersichtlicher.Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
18.04.11 14:21 #3
- Registriert seit
- Jun 2009
- Beiträge
- 870
@angiii:
Gut, dass du nicht mit absoluten Werten arbeitest, das sollte man mit Java nur selten machen (es könnte sich z.B. die Schriftgröße oder das LookAndFeel ändern).
Zum ersten: reicht es nicht einfach, dass die JScrollPane nur Vertikal scrollen "darf"?
Zum zweiten: wie Akeshihiro sagt, so wie es jetzt ist, ist es übersichtlicher!Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
18.04.11 14:42 #4
@genodeftest
Das Problem ist, dass auch wenn man die horizontale Scrollbar wegmacht, sich das Panel immer noch entsprechend der Komponenten in die Breite dehnt, also die Scrollbar einfach ausmachen is nich. Wie gesagt, mit einer empfohlenen Größe gehts einwandfrei. Das Lustige dabei ist jedoch, dass man diese nichtmals richtig einstellen muss. Die Größe scheint dabei vollkommen egal zu sein, sogar der leere Konstruktoraufruf (new Dimension()), welcher die Werte 0 und 0 hat, wird akzeptiert und das Panel bzw. das FlowLayout macht schon den gewünschten Job.
EDIT:
Hmm.. Ich seh grad, dass dabei auch die vertikale Scrollbar verschwindet und damit wäre auch niemandem geholfen. Ich schau mal weiter...
Also Dimension() (0,0) ist nur die halbe Lösung (wenn man das so sagen darf). Auf der x-Achse ist 0 richtig, aber jetzt is ja noch das Problem mit der y-Achse, da die vertikale Scrollbar ja schon zum Scrollen noch auftauchen soll. Da muss man dann halt einen entsprechenden Wert einsetzen. Das Problem ist jedoch, dass man diesen ausrechnen müsste, halt entsprechend der Komponentenhöhe und anzahl der Zeilen. Ist eher ne fummelige Sache, aber ein anderer Weg fällt mir gerade auch nicht ein, sorry.Geändert von Akeshihiro (18.04.11 um 15:08 Uhr)
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
Hallo,
danke schonmal für die vielen Antworten! Die Sache mit dem entfernen der horizontalen Scrollbar hatte ich schon getestet. Letztendlich will ich ja wirklich nur vertikal scrollen. Nutzte diesen Code
Jedoch wurde dadurch wie hier schon erwähnt nur optisch die Scrollbar entfernt. Die Krokos wurden immer noch in den rechten Rand geschoben.Code :1
setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
@ Akeshihiro: Werd heut mal deinen Tipp mit Dimension() (0,0) versuchen. Habe mir überlegt, dass ich mit einem ComponentListener bzw. componentResized die Größe meines Hauptpanels üerwache und dann den Inhalt dynamisch anpasse.
Stell mir aber gerade die Frage, ob es für solche Grafischen Sachen nicht irgendwelche netten Add-Ons gibt. Letztendlich muss meine Nutzerübersicht ja nicht so wie im Moment aussehen. Denke dabei an JGraph oder das Graphical Modeling Framework. Kenn beides aber nur vom Hörensagen. Wäre das eine Alternative?
Ansonsten teste ich mal das mit Dimension.
-
20.04.11 11:06 #6
Die beiden erwähnten Frameworks könnten sicherlich genutzt werden (als Programmierer ist man ja kreativ
), aber ich habe mehr das Gefühl, dass die beiden Frameworks eher für visuelle Darstellungen gedacht sind als um damit zu "arbeiten", sprich eher sowas wie Klassendiagramme, PHP, Darstellung von Beziehungen und son Zeug.
Das mit dem Dimension hat ja (entgegen meiner anfänglichen Vermutung) nur zur Hälfte richtig funktioniert. Das Problem mit der horizontalen Scrollbar ist zwar behoben, dafür hat man dann aber das Problem mit der vertikalen Scrollbar, denn die is ja auch nich da, sollte dies aber sein, damit man durch die Krokos scrollen kann. Wie bereits gepostet, müsste man dann bei der preferedSize die y-Größe halt jedes mal entsprechend anpassen und um das zu können müsste man dann auch etwas rechnen, was ich aber nicht besonders schön finde.Geändert von Akeshihiro (20.04.11 um 11:11 Uhr)
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
So hab jetzt einen neuen Ansatz gefunden -> das sog. Wraplayout. Das ist eine Erweitung vom Flowlayout welche anscheinend genau das macht was ich suche.
http://tips4java.wordpress.com/2008/11/06/wrap-layout/
Wir nähern uns der Lösung an
-
20.04.11 17:19 #8
Das scheint sogar die Lösung zu sein, weil bei mir klappts wunderbar
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
Mensch du bist ja schneller im Testen als ich
. Wraplayout war die Lösung!
Danke für die Hilfe an alle!
Ähnliche Themen
-
FlowLayout mit angepasster PreferedSize
Von ElJarno im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 3Letzter Beitrag: 31.05.10, 08:29 -
FlowLayout - Reihenumbruch
Von Na_dine im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 3Letzter Beitrag: 10.10.07, 15:12 -
FlowLayout - Reihenumbruch
Von Na_dine im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 1Letzter Beitrag: 05.10.07, 18:21 -
Bild in FlowLayout anzeigen
Von andreas2000 im Forum JavaAntworten: 1Letzter Beitrag: 05.12.05, 10:33 -
Zeilenumbruch im Flowlayout erzwingen?
Von SonicBe@m im Forum JavaAntworten: 1Letzter Beitrag: 02.02.04, 12:33





Zitieren
Login





