Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在滚动窗格中多行排列组件_Java_Swing_Layout_Jpanel_Jscrollpane - Fatal编程技术网

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

Java 如何在滚动窗格中多行排列组件,java,swing,layout,jpanel,jscrollpane,Java,Swing,Layout,Jpanel,Jscrollpane,我需要在滚动窗格中添加大约600个图像,但所有图像都是并排排列的 public CollectionPanel(Controller controller) this.setBackground(Color.white); this.setLayout(new BorderLayout()); JPanel content = new JPanel(); content.setLayout(new FlowLayout()); JScrollPane scrollPane =

我需要在滚动窗格中添加大约600个图像,但所有图像都是并排排列的

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

公共采集面板(控制器)
这个.背景(颜色.白色);
此.setLayout(新的BorderLayout());
JPanel content=新的JPanel();
content.setLayout(新的FlowLayout());
JScrollPane scrollPane=新的JScrollPane(JScrollPane.VERTICAL\u SCROLLBAR\u始终,JScrollPane.HORIZONTAL\u SCROLLBAR\u从不);
对于(int i=0;i<100;++i){
添加(新标签(i+1));
}
scrollPane.setViewportView(内容);
添加(滚动窗格,BorderLayout.CENTER);
}
当它们到达屏幕末端时,如何安排它们进行“换行”?

使用适合组件并排的流程布局,而不是
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));


请看一看&了解更多关于工作示例代码的信息。

看一看Rob Camick的

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

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

import java.awt.*;
导入javax.swing.*;
公共类测试播放{
公共测试播放(){
ImageIcon=newImageIcon(getClass().getResource(“/resources/stackoverflow2.png”);
JPanel panel=newjpanel(newwraplayout());

对于(int i=1;i我自己,我会尝试通过将图像、实际上是图像图标放入一个能够很好地处理图像图标的JList中来保持事情尽可能简单。给它一个水平换行,将其可见行数设置为0,将其放入一个JScrollPane,就这样了。

我不知道它将占用多少列(如果调整窗口大小,则可能需要更多/更少)是的,但计算行/列的数量不是正确的方法,因为这很容易出错(通过编辑标签大小)我不知道你在说什么而不去尝试并遵循我共享的链接。我不知道这样做有什么问题。为什么这不是一个正确的方法。你不需要编辑标签大小?我没有你用于“行”的值在这种情况下,只需使用方框布局。花点时间阅读更多有关它的内容。谢谢,刚刚在一个旧的StackOverflow线程中找到它,它工作正常。唯一的缺点是,有600个图像,您可以看到它是如何一行接一行地重新排列的。(可能是因为它需要反复验证布局才能获得当前窗口宽度)。