摆动动态(自动)适合布局

时间:2014-03-13 12:21:51

标签: java swing jpanel jlabel gridbaglayout

考虑100(动态)JLabel对象,我想在可调整大小的JPanel内显示它们。
目前我使用网格包布局(2列50行),但是当用户调整大小并展开表单时,我想要(例如)4列25行,小表格相同(1列,以其他方式填满整个面板(没有任何空白区域) 我知道这应该手动完成,目前我重绘(重绘)所有成员一旦用户调整表格,但我只是想知道是否有任何准备好的解决方案这样做。
谢谢你提前。

2 个答案:

答案 0 :(得分:2)

看看Rob Camick的WrapLayout

使用示例

enter image description here enter image description here

import java.awt.*;
import javax.swing.*;

public class TestWrapLayout {
    public TestWrapLayout () {
        ImageIcon icon = new ImageIcon(getClass().getResource("/resources/stackoverflow2.png"));
        JPanel panel = new JPanel(new WrapLayout());
        for (int i = 1; i <= 250; i++) {
            JLabel iconlabel = new JLabel(icon);
            iconlabel.setLayout(new BorderLayout());
            JLabel textlabel = new JLabel(String.valueOf(i));
            textlabel.setHorizontalAlignment(JLabel.CENTER);
            textlabel.setForeground(Color.WHITE);
            textlabel.setFont(new Font("impact", Font.PLAIN,20));
            iconlabel.add(textlabel);
            panel.add(iconlabel);
        }
        JFrame frame = new JFrame();
        frame.add(new JScrollPane(panel));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                new TestWrapLayout();
            }
        });
    }
}

答案 1 :(得分:1)

您可以在public void layoutContainer(Container target)方法中定义自定义LayoutManager以根据需要定位子项。

这里实现了类似的示例http://java-sl.com/tip_columns_flow_layout.html