tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
610
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Angiii Angiii ist offline Mitglied Gold
    Registriert seit
    Nov 2008
    Beiträge
    107
    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;
        }
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Flowlayout in Flowlayout - Dynamisch?-crocdog.png   Flowlayout in Flowlayout - Dynamisch?-crocdog2.png  

     

  2. #2
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    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 ;)

  3. #3
    genodeftest genodeftest ist offline Mitglied Brillant
    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)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  4. #4
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    @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 ;)

  5. #5
    Angiii Angiii ist offline Mitglied Gold
    Registriert seit
    Nov 2008
    Beiträge
    107
    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

    Code :
    1
    
    setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    Jedoch wurde dadurch wie hier schon erwähnt nur optisch die Scrollbar entfernt. Die Krokos wurden immer noch in den rechten Rand geschoben.

    @ 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.
     

  6. #6
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    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 ;)

  7. #7
    Angiii Angiii ist offline Mitglied Gold
    Registriert seit
    Nov 2008
    Beiträge
    107
    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
     

  8. #8
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    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 ;)

  9. #9
    Angiii Angiii ist offline Mitglied Gold
    Registriert seit
    Nov 2008
    Beiträge
    107
    Mensch du bist ja schneller im Testen als ich . Wraplayout war die Lösung!
    Danke für die Hilfe an alle!
     

Ähnliche Themen

  1. FlowLayout mit angepasster PreferedSize
    Von ElJarno im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 31.05.10, 08:29
  2. FlowLayout - Reihenumbruch
    Von Na_dine im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 10.10.07, 15:12
  3. FlowLayout - Reihenumbruch
    Von Na_dine im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 05.10.07, 18:21
  4. Bild in FlowLayout anzeigen
    Von andreas2000 im Forum Java
    Antworten: 1
    Letzter Beitrag: 05.12.05, 10:33
  5. Zeilenumbruch im Flowlayout erzwingen?
    Von SonicBe@m im Forum Java
    Antworten: 1
    Letzter Beitrag: 02.02.04, 12:33