import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import javax.swing.ImageIcon;import javax.swing.Box;import javax.swing.SwingConstants;import javax.swing.BoxLayout;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTabbedPane;import javax.swing.JButton;import java.awt.event.*; public class LayoutDemo{ public static void main(String[] args) { JFrame frame = new JFrame ("Layout Manager Demo"); frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); JTabbedPane tp = new JTabbedPane(); tp.addTab ("Flow",new FlowPanel()); tp.addTab ("Border",new BorderPanel()); tp.addTab ("Grid",new GridPanel()); tp.addTab ("Box",new BoxPanel()); frame.setContentPane(tp); frame.pack(); frame.show(); }} //定义流式布局管理器class FlowPanel extends JPanel{ public FlowPanel () { /* 构造方法: 1: FlowLayout () 2: FlowLayout (int align) 3: FlowLayout (int align, int hgap, int vgap) 参数说明: align 表示一行的对齐方式.有左对齐FlowLayout.LEFT,居中对齐FlowLayout.CENTER,右对齐FlowLayout.RIGHT hgap:组件的水平间隙,vgap:组件的垂直间隙 */ FlowLayout layout = new FlowLayout (FlowLayout.LEFT, 10,50); layout.layoutContainer (this);//参数指明应用的对象容器.同于:setLayout (layout); layout.setAlignment (FlowLayout.CENTER); layout.setHgap (50); layout.setVgap (20); setBackground (Color.green); JButton b1 = new JButton ("BUTTON 1"); JButton b2 = new JButton ("BUTTON 2"); JButton b3 = new JButton ("BUTTON 3"); JButton b4 = new JButton ("BUTTON 4"); JButton b5 = new JButton ("BUTTON 5"); add (b1); add (b2); add (b3); add (b4); add (b5); }} //定义边界布局管理器 class BorderPanel extends JPanel{ private ImageIcon icon = new ImageIcon("Image//layoutDemodriveWay.gif"); JButton west = new JButton ("西"); JButton north = new JButton ("北"); JButton south = new JButton ("南"); JButton east = new JButton ("东"); JLabel center = new JLabel ("", icon,SwingConstants.CENTER); public BorderPanel() { setLayout (new BorderLayout()); setBackground (Color.black); west.addActionListener (new Button1Listener()); north.addActionListener (new Button2Listener()); south.addActionListener (new Button3Listener()); east.addActionListener (new Button4Listener()); /*将组件添加到边界布局的容器中需要指明位置如果不指明则 默认为BorderLayout.CENTER,可以覆盖*/ add (west,BorderLayout.WEST); add (north,BorderLayout.NORTH); add (south,BorderLayout.SOUTH); add (east,BorderLayout.EAST); add (center,BorderLayout.CENTER); } private class Button1Listener implements ActionListener { public void actionPerformed (ActionEvent event) { center.setIcon (new ImageIcon("Image//layoutDemoarrowLeft.gif")); repaint(); } } private class Button2Listener implements ActionListener { public void actionPerformed (ActionEvent event) { center.setIcon(new ImageIcon("Image//layoutDemoarrowUp.gif")); repaint(); } } private class Button3Listener implements ActionListener { public void actionPerformed (ActionEvent event) { center.setIcon(new ImageIcon("Image//layoutDemoarrowDown.gif")); repaint(); } } private class Button4Listener implements ActionListener { public void actionPerformed (ActionEvent event) { center.setIcon(new ImageIcon("Image//layoutDemoarrowRight.gif")); repaint(); } }} //定义盒式布局管理器class BoxPanel extends JPanel{ public BoxPanel() { /* 就一个构造函数 BoxLayout (Container target, int axis) 参数说明: target指明要设置次布局方式的容器 axis设置布局方式,有如下选择: BoxLayout.X_AXIS从左到右 BoxLayout.Y_AXIS从上到下 BoxLayout.LINE_AXIS BoxLayout.PAGE_AXIS */ setLayout (new BoxLayout (this, BoxLayout.X_AXIS)); setBackground (Color.green); JButton b1 = new JButton ("BUTTON 1"); JButton b2 = new JButton ("BUTTON 2"); JButton b3 = new JButton ("BUTTON 3"); JButton b4 = new JButton ("BUTTON 4"); JButton b5 = new JButton ("BUTTON 5"); /* 盒式布局管理器的组件间没有间距,可以添加不可见组件到容器中去以便占用空间 Box类包含静态方法可创建不可见组件,他是在包java.swing中 Box类定义两种组件:固定大小的和可以伸缩的 Box的一些静态方法: createGlue()//伸缩的,可水平伸缩也可垂直伸缩 createRigidArea(Dimension d)//固定水平垂直大小 createHorizontalGlue()//水平伸缩 createHorizontalStrut(int width)//固定水平大小 createVerticalGlue()//垂直伸缩 createVerticalStrut(int height)//固定垂直大小 */ add (Box.createHorizontalGlue()); add (b1); add (Box.createRigidArea (new Dimension (10,0))); add (b2); add (b3); add (Box.createHorizontalStrut (50)); add (b4); add (Box.createHorizontalGlue()); add (b5); }} //定义网格布局管理器class GridPanel extends JPanel{ public GridPanel() { /* 构造函数: GridLayout()//单行多列 GridLayout(int rows, int cols) GridLayout(int rows, int cols, int hgap, int vgap)//行列加水平垂直间隔 */ GridLayout layout = new GridLayout (2,3); layout.setRows (3);//当构造函数中已设置了行时此方法无效 layout.setColumns (4);//当构造函数中已设置了列时此方法无效 layout.setHgap (5); layout.setVgap (5); setLayout (layout); setBackground (Color.white); JButton b1 = new JButton ("BUTTON 1"); JButton b2 = new JButton ("BUTTON 2"); JButton b3 = new JButton ("BUTTON 3"); JButton b4 = new JButton ("BUTTON 4"); JButton b5 = new JButton ("BUTTON 5"); JButton b6 = new JButton ("BUTTON 6"); add (b1); add (b2); add (b3); add (b4); add (b5); add (b6); }}

评论