有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在滚动窗格中多行排列组件

我需要在滚动窗格中添加大约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) 个答案

  1. # 1 楼答案

    使用GridLayout而不是并排安装组件的FlowLayout

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

    你也可以试试^{}

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

    请看一下Using Layout Managers&A Visual Guide to Layout Managers了解有关工作示例代码的更多信息

  2. # 2 楼答案

    对于我自己,我会尽量让事情尽可能简单,把图像,实际上是图像图标,放到一个可以很好地处理图像图标的JList中。给它一个水平环绕,将其可见行数设置为0,将其放入一个JScrollPane,就这样了

  3. # 3 楼答案

    看看罗布·卡米克的WrapLayout

    您可以调整框架的大小,所有组件都将被重新格式化。下面是一个用法示例

    enter image description hereenter 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();
                }
            });
        }
    }