如何在Scrollpane中的多行中排列组件

时间:2014-05-18 12:38:44

标签: java swing layout jpanel jscrollpane

我需要在Scrollpane上添加大约600张图片,但所有图片都是并排排列的

Screenshot

public CollectionPanel(Controller controller)
  this.setBackground(Color.white);
  this.setLayout(new BorderLayout());
  JPanel content = new JPanel();
  content.setLayout(new FlowLayout());
  JScrollPane scrollPane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
  for(int i = 0; i < 100; ++i){
    content.add(new Sticker(i+1)); 
  }
  scrollPane.setViewportView(content);
  this.add(scrollPane, BorderLayout.CENTER);
}

如何安排他们在到达屏幕末尾时制作“换行符”?

3 个答案:

答案 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)

使用GridLayout代替并排适合组件的FlowLayout

 JPanel content = new JPanel();
 content.setLayout(new GridLayout(rows,1)); 
 //pass no of rows with just one column

您也可以尝试使用BoxLayout

JPanel content = new JPanel();
content.setLayout(new BoxLayout(content, BoxLayout.PAGE_AXIS));

请查看Using Layout Managers&amp; A Visual Guide to Layout Managers了解有关工作示例代码的详细信息。

答案 2 :(得分:0)

我自己,我会尝试通过将ImageIcons实际放入一个可以很好地处理ImageIcons的JList来尽可能简化事情。给它一个水平换行设置,将其可见行数设置为0,将其放入JScrollPane,然后就可以了。