java - 如何在 Scrollpane 中以多行排列组件

标签 java swing layout jpanel jscrollpane

我需要向滚动 Pane 添加大约 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);
}

如何安排它们在到达屏幕末尾时“换行”?

最佳答案

看看 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();
            }
        });
    }
}

关于java - 如何在 Scrollpane 中以多行排列组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23721981/

相关文章:

java - 游程编码压缩

java - 如何仅过滤掉 Java 顺序流中与谓词不匹配的第一个元素?

java - 如何更改Java swing组件的默认字体大小

ios - 带有 Swift 滑动菜单的空白菜单按钮

html - 如何使用类使用 CSS 将无表格 HTML 表单呈现为两列?

java - 如何在REST服务启动时连接MySql数据库?

java - 在 Java 文件名字符串中使用 "file:"前缀作为文件路径?

java - 如何更改 JOptionPane.showOptionDialog() 的大小和位置

java - 如何设置JtabbedPane选项卡中Jtable的大小以及如何设置JTabbedPane中选项卡的布局?

java - 使用 MigLayout 用两个组件填充整个单元格