Hallo!
Ich habe für meine JScrollPane ein Panel mit einem WrapLayout, damit die Zeile umgebrochen wird.
Problem: Es klappt nicht!
Ich habe für meine JScrollPane ein Panel mit einem WrapLayout, damit die Zeile umgebrochen wird.
Problem: Es klappt nicht!
Java:
package com.ludevstudio.passwordmanager;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.ScrollPane;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
public class ManagerPanel extends JPanel{
// This Class contains the Manager
JPanel panel;
// Constructor and params
public ManagerPanel() {
add(gettScrollPane());
}
public JScrollPane gettScrollPane() {
JPanel panel = new JPanel();
WrapLayout layout = new WrapLayout(WrapLayout.LEFT, 10, 10);
layout.preferredLayoutSize(this);
panel.setLayout(layout);
panel.setMinimumSize(new Dimension(500, 100));
ItemPanel[] items = new ItemPanel[10];
for (int i = 0; i<items.length; i++) {
items[i] = new ItemPanel();
panel.add(items[i]);
}
JScrollPane pane = new JScrollPane(panel,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
return pane;
}
}
Java:
package com.ludevstudio.passwordmanager;
import java.awt.*;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
public class WrapLayout extends FlowLayout
{
private Dimension preferredLayoutSize;
public WrapLayout()
{
super();
}
public WrapLayout(int align)
{
super(align);
}
public WrapLayout(int align, int hgap, int vgap)
{
super(align, hgap, vgap);
}
@Override
public Dimension preferredLayoutSize(Container target)
{
return layoutSize(target, true);
}
@Override
public Dimension minimumLayoutSize(Container target)
{
Dimension minimum = layoutSize(target, false);
minimum.width -= (getHgap() + 1);
return minimum;
}
private Dimension layoutSize(Container target, boolean preferred)
{
synchronized (target.getTreeLock())
{
int targetWidth = target.getSize().width;
if (targetWidth == 0)
targetWidth = Integer.MAX_VALUE;
int hgap = getHgap();
int vgap = getVgap();
Insets insets = target.getInsets();
int horizontalInsetsAndGap = insets.left + insets.right + (hgap * 2);
int maxWidth = targetWidth - horizontalInsetsAndGap;
Dimension dim = new Dimension(0, 0);
int rowWidth = 0;
int rowHeight = 0;
int nmembers = target.getComponentCount();
for (int i = 0; i < nmembers; i++)
{
Component m = target.getComponent(i);
if (m.isVisible())
{
Dimension d = preferred ? m.getPreferredSize() : m.getMinimumSize();
if (rowWidth + d.width > maxWidth)
{
addRow(dim, rowWidth, rowHeight);
rowWidth = 0;
rowHeight = 0;
}
if (rowWidth != 0)
{
rowWidth += hgap;
}
rowWidth += d.width;
rowHeight = Math.max(rowHeight, d.height);
}
}
addRow(dim, rowWidth, rowHeight);
dim.width += horizontalInsetsAndGap;
dim.height += insets.top + insets.bottom + vgap * 2;
Container scrollPane = SwingUtilities.getAncestorOfClass(JScrollPane.class, target);
if (scrollPane != null)
{
dim.width -= (hgap + 1);
}
return dim;
}
}
private void addRow(Dimension dim, int rowWidth, int rowHeight)
{
dim.width = Math.max(dim.width, rowWidth);
if (dim.height > 0)
{
dim.height += getVgap();
}
dim.height += rowHeight;
}
}