使用JScrollPane实现为JPanel(FlowLayout布局)增加滚动条的功能

         最近在做一个客户端软件,需要给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);   
    }
}


你可能感兴趣的:(软件)