JScrollPane auf JPanel - Resizing - Größe verändern

Status
Nicht offen für weitere Antworten.

m!k3

Bekanntes Mitglied
Hallo zusammen,

also erstmal zu meinem Problem:

Ich habe ein JPanel mit FlowLayout, dass einige Buttons anzeigt. Da auf dem kompletten JFrame noch andere Panels liegen und der Frame in der Größe veränderbar sein soll, möchte ich, dass das Panel mit den Buttons Scrollbalken bekommt.

Code:
/* Set Content Pane */
contentPanel = new JPanel();
northPanel   = new JPanel(new FlowLayout());
southPanel   = new JPanel(new FlowLayout(FlowLayout.LEFT)){

contentPanel.setLayout(new BorderLayout());
label = new JLabel("");
spane = new JScrollPane(southPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
spane.setViewportView(southPanel);

northPanel.add(label);
contentPanel.add(northPanel, BorderLayout.NORTH);
contentPanel.add(spane, BorderLayout.CENTER);

// so hier werden Buttons gesetzt auf das spane, sowie ein Label aufs northPanel (habs mal weggelassen)
// ....
// .... 

super.setContentPane( contentPanel );
        
/* Set GUI */
super.pack();
super.setSize(505,560);
super.setVisible(true);

So aktuell gibt es einen Scrollbalken unten, wenn die Buttons nicht im Bereich von 505px angezeigt werden können.

Nun möchte ich jedoch, dass das JPanel mit den Buttons auf die Breite des JFrames gesetzt wird, sodass die Knöpfe nicht mehr alle nebeneinander sondern auch untereinander dargestellt werden.

Hierzu verwende ich folgendes:

Code:
southPanel   = new JPanel(new FlowLayout(FlowLayout.LEFT)){
    public void setSize(Dimension d){
        d.width = getParent().getSize().width; 
        super.setSize(d);
        super.setPreferredSize(d); 
    }
};

Nun klappt zwar das Resizing, wenn der Frame größer gezogen wird, allerdings wenn der Frame kleiner gezogen wird, ändert sich die Breite des Panels nicht. Ich bin echt am verzweifeln und bekomme es nicht hin.

Ich hoffe ihr könnt mir da weiterhelfen, habe schon im Forum gesucht, aber nichts passendes gefunden. Das mit der Methode überschreiben setSize hab ich hier ausm Forum.

Ich danke euch wie immer Recht herzlich für eure Hilfe.

m!k3
 

André Uhres

Top Contributor
Code:
       southPanel   = new JPanel(new FlowLayout(FlowLayout.LEFT)){
            public Dimension getPreferredSize(){
                Dimension d = new Dimension(10,10);
                d.width = getParent().getSize().width;
                return d;
            }
        };
 

m!k3

Bekanntes Mitglied
Danke.

Das Handling ist soweit perfekt, nur das Scrollen klappt nicht. Es erscheinen keine Scrollbalken, auch nicht wenn ich sie fest einschalte.

Sorry für die späte Rückantwort. War das ganze WE unterwegs.
 

m!k3

Bekanntes Mitglied
Ich komme einfach nicht auf die richtige Höhe die ich brauche. Das müsste ja die Höhe des Panels sein, oder nicht?

Wie komme ich an diese ran?

getParent() liefert mir den Viewport
getParent().getParent() liefert mir das JScrollPane

Hab mir schon sämtliche Höhenkombinationen zurückgeben lassen.
 

André Uhres

Top Contributor
Du könntest erstmal die minimale Breite und Höhe des Panels festlegen (minW, minH).
Wenn d.width/d.height den entsprechenden minimalen Wert unterschreitet,
dann setzt du ihn gleich diesem minimalen Wert. Die Scrollbalken werden dann aktiviert,
damit die minimale Panelgrösse stets einsehbar bleibt. Alle Buttons müssen natürlich
bei minimaler Panelgrösse noch darin Platz haben.
Code:
           public Dimension getPreferredSize(){
                int minH=100, minW=400;
                Dimension d = new Dimension(minW,minH);
                d.width  = getParent().getSize().width;
                d.height = getParent().getSize().height;
                if(d.height < minH){
                    d.height = minH;
                }
                if(d.width < minW){
                    d.width = minW;
                }
                return d;
            }
 

m!k3

Bekanntes Mitglied
naja die Buttonanzahl kann ja variieren, d.h. ich müsste mir ständig an der Panelbreite und Buttonanzahl errechnen wie hoch das ganze mindestens sein darf, oder wie?

Das wäre ja mehr als umständlich.
 

m!k3

Bekanntes Mitglied
Naja ich kann mir nicht vorstellen, dass man das Rad neu erfinden muss um diese Problematik zu lösen. ;-)
 

m!k3

Bekanntes Mitglied
So... also ich hab das Rad neu erfunden und mir die Höhe selber zusammengerechnet.
Das ist vielleicht eine Aktion.

Hier beschrieben, für die die es interessiert:

Code:
private int picture_count;
private static final int button_size = 130;
private static final int space_size  = 10;

Code:
southPanel   = new JPanel(new FlowLayout(FlowLayout.LEFT)){
    public Dimension getPreferredSize(){ 
        Dimension d = new Dimension(10,10); 
                
        if (getParent().getSize().width > 0){            
            d.width = getParent().getSize().width;

            int rows   = (int)(float)(Math.ceil((double)(float)(picture_count) / (float)(d.width / button_size)));
            int space  = rows * space_size;
            int height = (int)(button_size * rows + space);
                    
            d.height = height;
        }
                
        return d; 
    } 
};


Also was machen diese Zeilen:
1. Habe die Bilderanzahl, eine feste Höhe und Breite des Buttons (130), sowie einen Spacebereich (10), den es zwischenden Buttons gibt.

2. Ist nun ein Breitenwert da (bei Erstausführung noch 0, deswegen die if Abfrage) dann wird die Breite vom Viewport geholt. Außerdem errechne ich mir die Höhe, indem ich mir erstmal die Anzahl der Zeilen (Rows) zurückgeben lasse.
Diese errechne ich mit Anzahl der Bilder / (Viewport Breite / Buttongröße). Das ganze muss natürlich aufgerundet werden.
Nun setzt sich die Höhe zusammen aus dem Row-Wert * Buttongröße + (Row-Wert * Spacebereich).

3. Rechenbeispiel
Anzahl der Bilder = 11
Viewport-Breite = 440
Buttongröße = 130
Space = 10

Rows = 4 (aufgerundet)
Space = 40
Höhe = 130 * 4 + 40 = 560

So werden genau 4 Bilder nebeneinander und untereinander dargestellt.

So ist immer optimales scrollen garantiert.

Hoffe ich konnte es richtig erklären - falls euch noch was auffällt sagts mir einfach.

PS. Es gibt bestimmt Wege, das ganze einfacher auszurechnen, ohne groß zu konvertieren. Bin nur auf diese Lösung jetzt gekommen. Vielleicht hat ja jemand einen besseren bzw. leichteren Weg. :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
M Swing JPanel in JScrollPane AWT, Swing, JavaFX & SWT 3
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
W Swing Größenänderung vom JPanel im JScrollPane und anschließendes positionieren AWT, Swing, JavaFX & SWT 2
R JScrollPane überdeckt JPanel? AWT, Swing, JavaFX & SWT 7
H JTree in JScrollPane passt sich nicht an Größe von JPanel an AWT, Swing, JavaFX & SWT 2
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
I JPanel in JScrollPane verkleinert sich leider nicht .... AWT, Swing, JavaFX & SWT 2
J Swing JTextPane mit JScrollPane auf JPanel scrollen nicht AWT, Swing, JavaFX & SWT 6
B Swing JPanel in JScrollPane einfügen AWT, Swing, JavaFX & SWT 2
S 3D-Grafik 3d Grafik auf einem JPanel oder im JScrollPane AWT, Swing, JavaFX & SWT 1
J Bilder auf JPanel (im JScrollPane) nacheinander laden AWT, Swing, JavaFX & SWT 0
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
G JScrollPane reagiert nicht auf Änderung der JPanel-Größe AWT, Swing, JavaFX & SWT 4
C jPanel auf jScrollPane zentrieren AWT, Swing, JavaFX & SWT 3
S JScrollpane mit JPanel und Probleme AWT, Swing, JavaFX & SWT 4
T Swing JPanel in JScrollPane mit maximaler Größe AWT, Swing, JavaFX & SWT 8
R JPanel von JScrollPane entfernen und hinzufügen AWT, Swing, JavaFX & SWT 3
G mehrere JPanel in ein (vertikales) JScrollPane AWT, Swing, JavaFX & SWT 8
K JScrollPane IN JPanel? AWT, Swing, JavaFX & SWT 2
S Swing Problem mit JCheckBox auf JPanel in JScrollPane AWT, Swing, JavaFX & SWT 8
F JScrollPane verwirft Layout von JPanel AWT, Swing, JavaFX & SWT 2
X Swing JScrollPane und JPanel AWT, Swing, JavaFX & SWT 3
C JPanel mit FlowLayout in JScrollPane - keinen Scrollbalken AWT, Swing, JavaFX & SWT 2
G Swing JScrollPane auf JPanel AWT, Swing, JavaFX & SWT 3
B JPanel zu groß in JScrollPane AWT, Swing, JavaFX & SWT 5
H Swing JScrollPane mit JPanel als View AWT, Swing, JavaFX & SWT 3
J Swing JScrollPane fasst JPanel und Groesse des JPanels soll sich aendern AWT, Swing, JavaFX & SWT 2
J Swing JScrollPane nimmt das JPanel zum Zeichnen nicht an AWT, Swing, JavaFX & SWT 5
A Swing Zeilenanzeige: JPanel als Header für JScrollPane AWT, Swing, JavaFX & SWT 7
H Swing Darstellungsproblem JPanel in JPanel in JScrollpane in JSplitPane AWT, Swing, JavaFX & SWT 4
MQue JPanel und JScrollPane AWT, Swing, JavaFX & SWT 8
S JPanel-Dim reicht nicht aus, JScrollPane AWT, Swing, JavaFX & SWT 8
R JPanel in JScrollPane - zeichnen der Mausposition AWT, Swing, JavaFX & SWT 3
R JPanel in JScrollPane neu zeichnen AWT, Swing, JavaFX & SWT 7
B Anfängerfrage zu Swing (JPanel und JScrollPane) AWT, Swing, JavaFX & SWT 16
J JPanel mit JScrollPane und FlowLayut AWT, Swing, JavaFX & SWT 3
N Mehrere JTextArea in einem JPanel und eine JScrollPane AWT, Swing, JavaFX & SWT 3
C JScrollPane ignoriert JPanel mit überschriebener pai.nt() AWT, Swing, JavaFX & SWT 11
G 2x JPanel im JScrollPane (Hintergrundbild in JScrollPane) AWT, Swing, JavaFX & SWT 9
F JScrollPane mit JPanel drinne zeigt keine Scroll-Leisten AWT, Swing, JavaFX & SWT 7
W JPanel in JScrollPane? AWT, Swing, JavaFX & SWT 2
M JPanel JTable in einem JScrollPane AWT, Swing, JavaFX & SWT 6
M JScrollPane im JPanel im JFrame SWING AWT, Swing, JavaFX & SWT 4
S JPanel in JScrollPane AWT, Swing, JavaFX & SWT 11
P JPanel in JScrollPane -> funktioniert nicht(vertikal scro AWT, Swing, JavaFX & SWT 5
S JScrollPane > JPanel - automatisch scrollen AWT, Swing, JavaFX & SWT 2
T Automatische Grössenanpassung JPanel / JScrollpane AWT, Swing, JavaFX & SWT 3
B JPanel in JScrollPane: Probleme mit Scrollleisten AWT, Swing, JavaFX & SWT 13
R JPanel eingebettet in einem JScrollPane AWT, Swing, JavaFX & SWT 3
O JScrollPane beinhaltet JPanel mit null Layout kein Scrollen AWT, Swing, JavaFX & SWT 3
J JPanel in JScrollPane Hilfe bitte AWT, Swing, JavaFX & SWT 2
S JPanel in JScrollPane in der Breite begrenzen AWT, Swing, JavaFX & SWT 3
S Größe von jPanel bzw. jTextArea (in jScrollpane) anpassen AWT, Swing, JavaFX & SWT 1
B Schachtelung von JTable und JScrollpane in JPanel? AWT, Swing, JavaFX & SWT 2
N Probleme mit new JScrollPane(jPanel) AWT, Swing, JavaFX & SWT 6
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
B Swing JScrollPane scrollt nicht AWT, Swing, JavaFX & SWT 10
P JTextarea (in JScrollPane) zeigt nur die beiden letzten Einträge an? AWT, Swing, JavaFX & SWT 0
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
E wie in JScrollPane auf JTextArea zugreifen AWT, Swing, JavaFX & SWT 12
N Swing JScrollPane mit Tastatur bedienen? AWT, Swing, JavaFX & SWT 0
F JScrollPane anzeige AWT, Swing, JavaFX & SWT 7
K Swing JScrollPane wird nicht angezeigt wenn man Components darstellt. AWT, Swing, JavaFX & SWT 2
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
P Swing JEditorPane in Kombination mit JScrollPane AWT, Swing, JavaFX & SWT 29
S Swing jScrollPane - pro Eintrag der Liste, die jCheckBoxes Speichern die in dem Eintrag aktiviert wurden AWT, Swing, JavaFX & SWT 2
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
D JScrollPane in JTabbedPane AWT, Swing, JavaFX & SWT 3
MaxG. Swing JScrollPane AWT, Swing, JavaFX & SWT 10
Soloeco Swing JScrollPane AWT, Swing, JavaFX & SWT 6
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
J JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 5
B LayoutManager GridBagLayout und JScrollPane AWT, Swing, JavaFX & SWT 5
Thallius JScrollPane Scrollpos setzen nach Neuzeichnen AWT, Swing, JavaFX & SWT 3
P MalProgramm mit JScrollPane und Canvas AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
U JScrollPane -> JTabbedPane u.A. AWT, Swing, JavaFX & SWT 3
A Layout-Manager, JScrollPane, ... Chaos AWT, Swing, JavaFX & SWT 5
V JScrollPane im zur Laufzeit verändernden JFrame AWT, Swing, JavaFX & SWT 0
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
G JTextArea mit JScrollPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
Bluedaishi JScrollpane AWT, Swing, JavaFX & SWT 0
L JScrollPane scrollt nicht !! AWT, Swing, JavaFX & SWT 3
F JScrollPane Position setzen (x=0, y=0) AWT, Swing, JavaFX & SWT 2
S JScrollPane und BorderLayout AWT, Swing, JavaFX & SWT 1
W Swing JScrollPane für mein Fenster AWT, Swing, JavaFX & SWT 4
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
F JTable mit JScrollPane AWT, Swing, JavaFX & SWT 4
G JScrollPane bricht am Ende der Anzeige nicht um AWT, Swing, JavaFX & SWT 2
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
S 2D-Grafik Transparentes JScrollPane AWT, Swing, JavaFX & SWT 0
R Ändern Default-Verhalten von JScrollpane in einer JScrollpane AWT, Swing, JavaFX & SWT 1
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
A JScrollPane - ScrollBar Buttongröße verändern AWT, Swing, JavaFX & SWT 1
A Swing JScrollPane Problem AWT, Swing, JavaFX & SWT 6
H Swing JScrollPane mit "viel Inhalt" scrollt zu langsam (inkl. See-For-Yourself.jar :D) AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben