最近在做一个客户端软件,需要给JPanel增加一个滚动条,该JPanel是使用的是FlowLayout布局。在网上也找到了一些办法,如修改FlowLayout配合JScrollPane来实现,感觉比较麻烦。还有的通过设置PreferredSize来实现,但其中有错误。就是在设置PreferredSize的时候,JPanel和JScrollPane的Height都设置成了相同的,这样的话,滚动条就滚动不了多长;解决办法是加大JPanel的height,设置为其内容实际的高度。
代码如下:
package com.mytest;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class TestScrollPane extends JFrame{
public static void main(String args[]) {
TestScrollPane theApp = new TestScrollPane(320, 400);
}
public TestScrollPane(int xPixels, int yPixels){
super("Add Image");
JPanel panelContent = new JPanel(new FlowLayout(FlowLayout.LEFT, 1, 1));
JScrollPane scrollPane = new JScrollPane(panelContent);
scrollPane.setPreferredSize(new Dimension(xPixels - 5, yPixels));
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
int height = 55;
for (int i = 0; i < 10; i++) {
JLabel iconType = new JLabel();
iconType.setIcon(new ImageIcon("icon/pic.png"));
panelContent.add(iconType);
height += 55;
}
panelContent.setPreferredSize(new Dimension(xPixels - 5, height));
this.add(scrollPane, BorderLayout.CENTER);
setSize(xPixels, yPixels);
setVisible(true);
}
}
本文介绍如何在Java中使用JScrollPane为采用FlowLayout布局的JPanel添加滚动条。在实践中,通过调整PreferredSize和设置滚动条策略,解决了滚动条无法有效滚动的问题。
797

被折叠的 条评论
为什么被折叠?



