Hi,
ich würde gerne in einem JScrollPane (nur vertikale Scrollleiste) kleine Bilder positionieren, welche automatisch umbrechen, wenn der Platz in der jeweiligen Zeile nicht mehr reicht. Im ScrollPane müsen dabei auch noch andere Komponenten (darunter) positioniert werden, sodass die Bilder bezüglich der Höhe auch nur den Platz einnehmen dürften, den sie Benötigen (nicht etwa die komplette Fensterhöhe).
Mein derzeitiger Aufbau: JScrollPane -> JPanel (außen) -> JPanel (innen) -> Bilder
Wobei das JPanel (innen) FlowLayout besitzt und das Scrollable Interface implementiert (wegen des JScrollPane).
JPanel (außen) ist hier im BoxLayout (Y_AXIS) (dort kommen unter/über den Bildern noch andere Komponenten)
Problem: Das Umbrechen funktioniert nicht.
Komponentenübersicht:
Fenster Groß:
Fenster kleiner:
(farbige Abgrenzungen entsprechen den Paneln)
Hinweis: JPanelExtended ist ein JPanel mit implementiertem Scrollable Interface.
QuellCode:
JPanelExtended
Vielen Dank
LikeBlue
(btw. ich hätte gerne einen Aussagekräfigeren Titel genutzt, aber der darf "aus Spamschutzgründen nicht verwandt werden" ???:L )
ich würde gerne in einem JScrollPane (nur vertikale Scrollleiste) kleine Bilder positionieren, welche automatisch umbrechen, wenn der Platz in der jeweiligen Zeile nicht mehr reicht. Im ScrollPane müsen dabei auch noch andere Komponenten (darunter) positioniert werden, sodass die Bilder bezüglich der Höhe auch nur den Platz einnehmen dürften, den sie Benötigen (nicht etwa die komplette Fensterhöhe).
Mein derzeitiger Aufbau: JScrollPane -> JPanel (außen) -> JPanel (innen) -> Bilder
Wobei das JPanel (innen) FlowLayout besitzt und das Scrollable Interface implementiert (wegen des JScrollPane).
JPanel (außen) ist hier im BoxLayout (Y_AXIS) (dort kommen unter/über den Bildern noch andere Komponenten)
Problem: Das Umbrechen funktioniert nicht.
Komponentenübersicht:

Fenster Groß:

Fenster kleiner:

(farbige Abgrenzungen entsprechen den Paneln)
Hinweis: JPanelExtended ist ein JPanel mit implementiertem Scrollable Interface.
QuellCode:
Code:
import javax.swing.BoxLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Color;
public class test extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
public test() {
super();
initialize();
}
private void initialize() {
this.setSize(300, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(getJContentPane());
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
JScrollPane jScrollPane = new JScrollPane();
jScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
jScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
jContentPane.add(jScrollPane, BorderLayout.CENTER);
JPanelExtended jPanelAussen = new JPanelExtended();
jPanelAussen.setLayout(new BoxLayout(jPanelAussen, BoxLayout.Y_AXIS));
jPanelAussen.add(new JLabel("TEXT TEXT TEXT"));
jScrollPane.setViewportView(jPanelAussen);
JPanelExtended jPanel = new JPanelExtended();
jPanel.setLayout(new FlowLayout());
jPanel.setBackground(Color.YELLOW);
Image img1 = new Image("img1.jpg");
Image img2 = new Image("img2.jpg");
Image img3 = new Image("img3.jpg");
Image img4 = new Image("img4.jpg");
Image img5 = new Image("img5.jpg");
Image img6 = new Image("img6.jpg");
jPanel.add(img1);
jPanel.add(img2);
jPanel.add(img3);
jPanel.add(img4);
jPanel.add(img5);
jPanel.add(img6);
jPanelAussen.add(jPanel);
jPanelAussen.add(new JLabel("TEXT TEXT TEXT TEXT TEXT"));
}
return jContentPane;
}
}
JPanelExtended
Code:
import javax.swing.JPanel;
import javax.swing.Scrollable;
import java.awt.Dimension;
import java.awt.Rectangle;
public class JPanelExtended extends JPanel implements Scrollable {
public JPanelExtended() {
super();
}
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize();
}
public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
return 0;
}
public boolean getScrollableTracksViewportHeight() {
return false;
}
public boolean getScrollableTracksViewportWidth() {
return true;
}
public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
return 0;
}
}
Vielen Dank
LikeBlue
(btw. ich hätte gerne einen Aussagekräfigeren Titel genutzt, aber der darf "aus Spamschutzgründen nicht verwandt werden" ???:L )