/**

 * baidu :组件不会直接放到框架上,而是放在若干个面板上,这些面板再放到窗格上?

 * 实际上在JFrame上可直接添加Jbutton

 * 

 * BorderLayout

FlowLayout

GridLayout

GridBagLayout

CardLayout

BoxLayout



* GridBagLayout稍复杂,主要看BoxLayout、BorderLayout

 */

package layoutmanager;

import java.awt.BorderLayout;

import java.awt.Button;

import java.awt.CardLayout;

import java.awt.FlowLayout;

import java.awt.GridBagConstraints;

import java.awt.GridBagLayout;

import java.awt.GridLayout;

import java.awt.Label;

import java.awt.Panel;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.Box;

import javax.swing.BoxLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.table.DefaultTableModel;

/**

 *

 * @author Albert Li

 */

public class LayoutManager {

      JFrame mJFrame = new JFrame();     

    

    

   public  void InitGridLayout(){            

        mJFrame.setTitle("GridLayout");

        mJFrame.setLayout(new GridLayout(3,3,5,5));        

        for(int i=1; i<10; i++){

           JButton mJButton = new JButton(String.valueOf(i));

           mJFrame.add(mJButton);          

        }

         mJFrame.setBounds(300, 300, 300, 300); 

        mJFrame.setVisible(true);

        mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

   

   public void InitFlowLayout(){

       mJFrame.setTitle("FlowLayout");

       mJFrame.setLayout(new FlowLayout(5, 10, 10));

       

        for(int i=1; i<10; i++){

           JButton mJButton = new JButton(String.valueOf(i));

           mJFrame.add(mJButton);          

        }                   

     

        mJFrame.setBounds(300, 300, 300, 300); 

        mJFrame.setVisible(true);

        mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       

   }

   

   Panel pnlCommandArea = new Panel();

   Panel pnlDisplayArea = new Panel();

   CardLayout mCardLayout = new CardLayout();

    JButton mjButton = new JButton("Command");

   public void InitCardLayout(){

       mJFrame.setTitle("CardLayout");

       mJFrame.setLayout(new BorderLayout(10,10));

       

       

       pnlDisplayArea.setLayout(mCardLayout);

       

       

       Panel pnlFirst = new Panel();       

       Panel pnlSed = new Panel();

       Panel pnlThird = new Panel();      

      

       pnlFirst.add(new Label("first"));

       pnlSed.add(new Label("second"));

       pnlThird.add(new Label("third"));

       pnlFirst.add(new JButton("button 1"));

        pnlSed.add(new JButton("button 2"));

         pnlThird.add(new JButton("button 3"));

       

       pnlDisplayArea.add(pnlFirst,"Cardlayout_first");

       pnlDisplayArea.add(pnlSed,"Cardlayout_sed");

       pnlDisplayArea.add(pnlThird,"Cardlayout_Third");

       

       ((CardLayout)pnlDisplayArea.getLayout()).show(pnlDisplayArea,"CardLayout_first");

       

      

       mjButton.addActionListener(new ActionListener() {

           @Override

           public void actionPerformed(ActionEvent e) {

               //throw new UnsupportedOperationException("Not supported yet.");

            //  ProcessAction(e);

                mCardLayout.next(pnlDisplayArea);

              // ((CardLayout)pnlDisplayArea.getLayout()).show(pnlDisplayArea, "Cardlayout_sed");

           }

       });

       pnlCommandArea.add(mjButton);

       

        mJFrame.add(pnlCommandArea,BorderLayout.NORTH);

        mJFrame.add(pnlDisplayArea,BorderLayout.CENTER);

        

      

        

        mJFrame.setBounds(300, 300, 300, 300); 

        mJFrame.setVisible(true);

        mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        

       

       

   }

   

   //将组件添加到Box,此时且不需要设置布局,由新建Box时设置水平还是垂直

   public void InitBoxLayout(){

       mJFrame.setTitle("BoxLayout");

       //不需要下面这句话,错误

       //mJFrame.setLayout(new BoxLayout(mJFrame,BoxLayout.X_AXIS ));

       

       Box mBox =Box.createHorizontalBox();

     

         for(int i=1; i<15; i++){

           JButton mJButton = new JButton(String.valueOf(i));

           mBox.add(mJButton);          

        } 

       

       mJFrame.add(mBox);

        mJFrame.setBounds(300, 300, 300, 300); 

        mJFrame.pack();

        mJFrame.setVisible(true);

        mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

               

               }

   

   //将组件直接添加到Panel,需先设置panel 的布局(为BoxPanel , 垂直还是水平)

   //我坐在窗前,有时候还可以看到鸟飞过,面对不过空无一物的天空,底下是城市的边缘,很矮很矮的地方。

   public void boxLayout(){

       Panel mPanel = new Panel();

       BoxLayout mBoxLayout = new BoxLayout(mPanel, BoxLayout.Y_AXIS);

       mPanel.setLayout(mBoxLayout);

       

        for(int i=1; i<15; i++){

           JButton mJButton = new JButton(String.valueOf(i));

           mPanel.add(mJButton);          

        } 

      

        mJFrame.add(mPanel);

        mJFrame.setBounds(300, 300, 300, 300); 

        mJFrame.pack();

        mJFrame.setVisible(true);

        mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       

       

   }

  public  void BoxTopPanel() { 

JPanel topPanel = new JPanel(); 

 String[] columnName = { "姓名", "性别", "单位", "参加项目", "备注" }; 

 String[][] rowData = { { "张三", "男", "计算机系", "100 米 ,200 米", "" }, 

 { "李四", "男", "化学系", "100 米,铅球", "" }, 

 { "李四", "男", "化学系", "100 米,铅球", "" }, 

 { "李四", "男", "化学系", "100 米,铅球", "" }, 

 { "李四", "男", "化学系", "100 米,铅球", "" }, 

 }; 

            // 创建表格

 JTable table = new JTable(new DefaultTableModel(rowData, columnName)); 

            // 创建包含表格的滚动窗格

 JScrollPane scrollPane = new JScrollPane(table);

 scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 

            // 定义 topPanel 的布局为 BoxLayout,BoxLayout 为垂直排列

 topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.Y_AXIS)); 

            // 先加入一个不可见的 Strut,从而使 topPanel 对顶部留出一定的空间

 topPanel.add(Box.createVerticalStrut(10)); 

            // 加入包含表格的滚动窗格 

 topPanel.add(scrollPane); 

            // 再加入一个不可见的 Strut,从而使 topPanel 和 middlePanel 之间留出一定的空间

  topPanel.add(Box.createVerticalStrut(10)); 

  

  mJFrame.add(topPanel);

        mJFrame.setBounds(300, 300, 300, 150); 

        //mJFrame.pack();

        mJFrame.setVisible(true);

        mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  

 } 

   

   

   

   public void InitGridBagLayout(){

       GridBagLayout mGridBagLayout = new GridBagLayout();

       mJFrame.setLayout(mGridBagLayout);

       

       GridBagConstraints mGridBagConstraints = new GridBagConstraints();

       

       mGridBagConstraints.fill = GridBagConstraints.BOTH;

       mGridBagConstraints.gridx = 0;

       mGridBagConstraints.gridy = 0;

       mGridBagConstraints.gridheight = 2;

       mGridBagConstraints.gridwidth = 1;

       mGridBagConstraints.anchor = GridBagConstraints.NORTH;

       mGridBagConstraints.weightx = 0;

       mGridBagConstraints.weighty = 0;

       

       JButton btn = new JButton("button 1");       

      mGridBagLayout.setConstraints(btn, mGridBagConstraints);

      mJFrame.add(btn);

      

      mGridBagConstraints.fill = GridBagConstraints.BOTH;

       mGridBagConstraints.gridx = 300;

       mGridBagConstraints.gridy = 300;

       mGridBagConstraints.gridheight = GridBagConstraints.REMAINDER;

       mGridBagConstraints.gridwidth = 10;

       mGridBagConstraints.anchor = GridBagConstraints.SOUTHEAST;

       mGridBagConstraints.weightx = 0;

       mGridBagConstraints.weighty = 0;

       

       btn = new JButton("button 2"); 

       mGridBagLayout.setConstraints(btn, mGridBagConstraints);

        mJFrame.add(btn);

      

       mJFrame.setBounds(300, 300, 300, 300); 

       // mJFrame.pack();

        mJFrame.setVisible(true);

        mJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      

      

   }

   

    private void ProcessAction(ActionEvent e){

        if(((Button)e.getSource()).equals(mjButton)){              

                  mCardLayout.next(pnlDisplayArea);    

               }

   }

/**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        // TODO code application logic here

       LayoutManager mLayoutManager = new LayoutManager();

      // mLayoutManager.InitGridLayout();

       //mLayoutManager.InitFlowLayout();

       //mLayoutManager.InitCardLayout();//BorderLayout

       //

      // mLayoutManager.InitBoxLayout();

       //mLayoutManager.InitGridBagLayout();

       

      // mLayoutManager.boxLayout();

       mLayoutManager.BoxTopPanel();

       

    }

}

04-14 17:37