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