importjava.awt.BorderLayout;importjava.awt.Dimension;importjavax.swing.BorderFactory;importjavax.swing.Box;importjavax.swing.BoxLayout;importjavax.swing.DefaultListModel;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JList;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.ListSelectionModel;public class BoxLayoutDemo extendsJPanel {
JPanel sportPanel;
JPanel queryPanel;
JPanel middlePanel;publicBoxLayoutDemo() {//主面板由3个子面板组成,在水平方向排列
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));this.setSportPanel();this.setMiddlePanel();this.setQueryPanel();this.add(sportPanel);this.add(middlePanel);this.add(queryPanel);
}private voidsetSportPanel() {
System.out.println("setSportPanel called");//本函数内包含以下两个控件
JLabel sourceLabel;//文字标签
JScrollPane sourceListScroller;//滚动条//文字标签
sourceLabel = new JLabel("运动项目");
sourceLabel.setAlignmentY(TOP_ALIGNMENT);
sourceLabel.setBorder(BorderFactory.createEmptyBorder(4, 5, 0, 5));//创建一个列表,包含运动项目
DefaultListModel listModel = new DefaultListModel();
listModel.addElement("100米");
listModel.addElement("200米");
listModel.addElement("400米");
listModel.addElement("跳远");
listModel.addElement("跳高");
listModel.addElement("铅球");
JList sourceList = new JList(listModel);
sourceList
.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
sourceList.setVisibleRowCount(5);//初始状态保持5行可见//滚动条
sourceListScroller = newJScrollPane(sourceList);
sourceListScroller
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
sourceListScroller.setAlignmentY(TOP_ALIGNMENT);//开始布局主面板
sportPanel = newJPanel();
sportPanel.setLayout(new BoxLayout(sportPanel, BoxLayout.Y_AXIS));//垂直布局
sportPanel.setBorder(BorderFactory.createBevelBorder(1));
sportPanel.add(sourceLabel);//加入文字标签到
sportPanel.add(sourceListScroller);//加入运动项目列表
}private voidsetMiddlePanel() {//本函数包含2个按钮
JButton toTargetButton = new JButton(">>");
JButton toSourceButton= new JButton("<
middlePanel = newJPanel();
middlePanel.setBorder(BorderFactory.createBevelBorder(1));
middlePanel.setLayout(new BoxLayout(middlePanel, BoxLayout.Y_AXIS));//主面板为垂直布局
middlePanel.add(toTargetButton);//添加第一个按钮>>
middlePanel.add(Box.createRigidArea(new Dimension(15, 15)));//中间添加一个看不见的rigidArea
middlePanel.add(toSourceButton);//添加第二个按钮<<
}private voidsetQueryPanel() {//本函数包含2个控件
JLabel targetLabel;
JScrollPane targetListScroller;//文字标签
targetLabel = new JLabel("查询项目");
targetLabel.setAlignmentY(TOP_ALIGNMENT);
targetLabel.setBorder(BorderFactory.createEmptyBorder(4, 5, 0, 5));//创建列表查询项目
DefaultListModel targetListModel = new DefaultListModel();
targetListModel.addElement("100米");
JList targetList = new JList(targetListModel);
targetList
.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);//滚动条
targetListScroller = newJScrollPane(targetList);
targetListScroller
.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
targetListScroller.setAlignmentY(TOP_ALIGNMENT);//设置主面板布局
queryPanel = newJPanel();
queryPanel.setLayout(new BoxLayout(queryPanel, BoxLayout.Y_AXIS));//垂直布局
queryPanel.setBorder(BorderFactory.createBevelBorder(1));
queryPanel.add(targetLabel);//添加文字标签
queryPanel.add(targetListScroller);//添加滚动条
}public static voidmain(String[] args) {
JFrame frame= new JFrame("BoxlayoutDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(newBoxLayoutDemo());
frame.pack();//frame.repaint();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}