Java 如何在滚动窗格中多行排列组件
我需要在滚动窗格中添加大约600个图像,但所有图像都是并排排列的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 =
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个图像,您可以看到它是如何一行接一行地重新排列的。(可能是因为它需要反复验证布局才能获得当前窗口宽度)。