我需要在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);
}
如何安排他们在到达屏幕末尾时制作“换行符”?
答案 0 :(得分:2)
看看Rob Camick的WrapLayout。
您可以调整框架的大小,并为您重新格式化所有组件。这是一个示例用法
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,然后就可以了。