GridLayout布局,JPanel上的添加的JScroll没有用,JPanel上的控件总是挤在一起。程序如下,请问如何才能让JPanel上的滚动条起作用呀?import javax.swing.JFrame;   
import javax.swing.*;
import java.awt.*;
import javax.swing.JTable;
import javax.swing.BorderFactory;
import javax.swing.table.TableModel;
import javax.swing.table.AbstractTableModel;
import javax.swing.JSplitPane;
public   class   testMain   {  
  public   static   void   main(String[]   args)   {    
                JFrame   f=new   JFrame();   
                TwoSeatJPanel   cp=new   TwoSeatJPanel();   
                f.add(cp);   
                f.setSize(500,500);   
                f.setVisible(true);   
    
}   
}    class TwoSeatJPanel extends JPanel { static final int NUMOFSEAT = 10;
static final int NUMOFSEAT2 = NUMOFSEAT * 2; JButton whiteButton[] = new JButton[NUMOFSEAT2];
JButton blackButton[] = new JButton[NUMOFSEAT2];
JLabel seatLabel[] = new JLabel[NUMOFSEAT2];
JPanel seatPanel[] = new JPanel[NUMOFSEAT2];
JPanel leftPanel;
JTable table;
JTextArea textArea;
JSplitPane splitPanel1,splitPanel2; public TwoSeatJPanel() { leftPanel = new JPanel();
// 10行2列布局
leftPanel.setLayout(new GridLayout(10,2,5,5));
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.CENTER;
gbc.insets = new Insets(2,2,2,2);
// 添加button和label
for (int i = 0; i < NUMOFSEAT2; i ++) {
seatLabel[i] = new JLabel("seat " + Integer.valueOf(i+1).toString());
whiteButton[i] = new JButton("empty");
blackButton[i] = new JButton("empty");
seatPanel[i] = new JPanel();
seatPanel[i].setLayout(new GridBagLayout());
seatPanel[i].setBorder(BorderFactory.createTitledBorder("第 "+Integer.valueOf(i+1).toString()+" 桌"));
}
for (int i = 0; i < NUMOFSEAT2; i ++) {
gbc.gridy = i + 1;
gbc.gridx = 0;
seatPanel[i].add(blackButton[i],gbc);
gbc.gridx = 1;
seatPanel[i].add(seatLabel[i],gbc);
gbc.gridx = 2;
seatPanel[i].add(whiteButton[i],gbc);
// seatPanel[i].setPreferredSize(new Dimension(50,50));//////////////////////////////////////////////!!!!!!!!!!!!!1
leftPanel.add(seatPanel[i]);
}
// 添加滚动条
JScrollPane leftPanelScrollPane = new JScrollPane();
leftPanelScrollPane.setViewportView(leftPanel); 
leftPanelScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
leftPanelScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
add(leftPanelScrollPane);
leftPanel.setPreferredSize(new Dimension(200,200));
}
}

解决方案 »

  1.   

    我用JScrollPane好象都是和JTable,JText之类的一起用.
      

  2.   

    leftPanel.setPreferredSize(new   Dimension(200,200)); 
    这一句设置了面板的自动扩展时的大小,所以就老是很小了,如果要做成ScrollPane的可视区比较小的形式,可以用下面的方法
    leftPanelScrollPane.setViewportView(leftPanel);   
    leftPanelScrollPane.getViewport().setPreferredSize(new Dimension(200,200));这样就可以看到里面的面板正常显示了