JPanel中动态添加50个带图标的JLabel,再用JScrollPane添加这个JPanel,在JPanel中用的布局是FlowLayout,但出现的效果是只会出现横向的滚动条(向横向发展),不会向垂直方向发展,请问各位高手,如何达到我要的效果,最好能贴些代码,

解决方案 »

  1.   

    JPanel使用java.awt.GridLayout布局管理器就可以了
      

  2.   

    JPanel使用java.awt.GridLayout布局管理器好象不行,不过我的问题中还因说明,JLabel要动态变化
    第一,行数要通过计算才能得出
    第二,并且不美观,一行也会布满整个JPanel,10行也会布满整个JPanel我的每排8个是指在JPanel中的每一行最多不能超过8个,一旦超过8个就要换行,
    其实我做这个,是为了实现餐饮收银系统中桌位状态的一个界面,
    小弟在此先谢了
      

  3.   

    import javax.swing.*;
    import java.awt.*;
    public class JPanelTest extends JFrame{
    Container con;
    JPanel    pnlMain=new JPanel();
    JScrollPane jspMain;

    JPanelTest(){
    con = this.getContentPane();
    pnlMain.setLayout(new GridLayout(50,1));
    pnlMain.setSize(149,2000);

    for (int i =0 ; i<50; i++){
    pnlMain.add(new JLabel("第"+(new Integer(i).toString())+"个"));
    }

    jspMain= new JScrollPane(pnlMain);

    con.add(jspMain,"Center");
    this.setBounds(150,150,350,200);
    this.setVisible(true);

    }
    public static void main(String[] args ){
    JPanelTest ob = new JPanelTest();
    }
    }这个你试试看!
      

  4.   

    import javax.swing.*;
    import java.awt.*;
    public class JPanelTest extends JFrame{
    Container con;
    JPanel    pnlMain=new JPanel();
    JScrollPane jspMain;
    private   int total = 50;
    private   int line = 8;
    JPanelTest(){
    con = this.getContentPane();
    pnlMain.setLayout(new GridLayout(total/line,8));
    pnlMain.setSize(149,2000);

    for (int i =0 ; i<50; i++){
    pnlMain.add(new JLabel("第"+(new Integer(i).toString())+"个"));
    }

    jspMain= new JScrollPane(pnlMain);

    con.add(jspMain,"Center");
    this.setBounds(150,150,350,200);
    this.setVisible(true);

    }
    public static void main(String[] args ){
    JPanelTest ob = new JPanelTest();
    }
    }你来看看是不是这个样子的??
    一行显示8列。让它自己除!!
      

  5.   

    还是没解决,如果只有一行8个JLabel,那么显示出来的一行会在中间,我要求从顶端开始
      

  6.   

    import java.awt.*;
    import java.awt.event.MouseEvent;import javax.swing.*;
    import javax.swing.event.MouseInputListener;public class T {
    public static void main(String[] args) {
    JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT)) {
    @Override
    public Dimension getPreferredSize() {
    JViewport viewport = (JViewport) getParent();
    if (viewport != null) {
    int wid = viewport.getWidth();
    setSize(wid, 100);
    doLayout();

    FlowLayout layout = (FlowLayout) getLayout();
    int hei = layout.getVgap();
    for (int i = 0; i < getComponentCount(); i++) {
    Component c = getComponent(i);
    hei = Math.max(hei, c.getY() + c.getHeight() + layout.getVgap());
    }

    return new Dimension(wid, hei);
    }
    return super.getPreferredSize();
    }
    };
    for (int i = 0; i < 50; i++) {
    p.add(new JLabel("Label - " + i));
    } JScrollPane sp = new JScrollPane(p);
    JFrame f = new JFrame();
    f.getContentPane().add(sp, BorderLayout.CENTER);
    f.setSize(400, 300);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }
    }
      

  7.   

    谢谢gtlang78,问题已按照你的方法解决,同时也谢谢ourmessage