LayoutDemo.java
001 package cn.rolia.learning.swing;002 import java.awt.FlowLayout;003 import java.awt.GridLayout;004 import java.awt.BorderLayout;005 import java.awt.Color;006 import java.awt.Dimension;007 import javax.swing.ImageIcon;008 import javax.swing.Box;009 import javax.swing.SwingConstants;010 import javax.swing.BoxLayout;011 import javax.swing.JFrame;012 import javax.swing.JLabel;013 import javax.swing.JPanel;014 import javax.swing.JTabbedPane;015 import javax.swing.JButton;016 import java.awt.event.*;017 018 public class LayoutDemo019 {020 public static void main(String[] args)021 {022 JFrame frame = new JFrame ("Layout Manager Demo");023 frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);024 025 JTabbedPane tp = new JTabbedPane();026 tp.addTab ("Flow",new FlowPanel());027 tp.addTab ("Border",new BorderPanel());028 tp.addTab ("Grid",new GridPanel());029 tp.addTab ("Box",new BoxPanel());030 031 frame.setContentPane(tp);032 frame.pack();033 frame.setVisible(true);034 }035 }036 037 //定义流式布局管理器038 class FlowPanel extends JPanel039 {040 /**041 * 042 */043 private static final long serialVersionUID = 1L;044 045 public FlowPanel ()046 {047 /*048 构造方法:049 1: FlowLayout ()050 2: FlowLayout (int align)051 3: FlowLayout (int align, int hgap, int vgap)052 参数说明:053 align 表示一行的对齐方式.有左对齐FlowLayout.LEFT,居中对齐FlowLayout.CENTER,右对齐FlowLayout.RIGHT054 hgap:组件的水平间隙,vgap:组件的垂直间隙055 */056 FlowLayout layout = new FlowLayout (FlowLayout.LEFT, 10,50);057 layout.layoutContainer (this);//参数指明应用的对象容器.同于:setLayout (layout);058 layout.setAlignment (FlowLayout.CENTER);059 layout.setHgap (50);060 layout.setVgap (20);061 062 setBackground (Color.green);063 064 JButton b1 = new JButton ("BUTTON 1");065 JButton b2 = new JButton ("BUTTON 2");066 JButton b3 = new JButton ("BUTTON 3");067 JButton b4 = new JButton ("BUTTON 4");068 JButton b5 = new JButton ("BUTTON 5");069 070 add (b1);071 add (b2);072 add (b3);073 add (b4);074 add (b5);075 }076 }077 078 079 080 081 082 083 084 085 086 087 //定义边界布局管理器088 089 class BorderPanel extends JPanel090 {091 /**092 * 093 */094 private static final long serialVersionUID = 1L;095 private ImageIcon icon = new ImageIcon("Image//layoutDemodriveWay.gif");096 JButton west = new JButton ("西");097 JButton north = new JButton ("北");098 JButton south = new JButton ("南");099 JButton east = new JButton ("东");100 JLabel center = new JLabel ("", icon,SwingConstants.CENTER);101 102 public BorderPanel()103 {104 setLayout (new BorderLayout());105 106 setBackground (Color.black);107 west.addActionListener (new Button1Listener());108 north.addActionListener (new Button2Listener());109 south.addActionListener (new Button3Listener());110 east.addActionListener (new Button4Listener());111 112 113 /*将组件添加到边界布局的容器中需要指明位置如果不指明则114 默认为BorderLayout.CENTER,可以覆盖*/115 116 add (west,BorderLayout.WEST);117 add (north,BorderLayout.NORTH);118 add (south,BorderLayout.SOUTH);119 add (east,BorderLayout.EAST);120 add (center,BorderLayout.CENTER);121 122 }123 124 private class Button1Listener implements ActionListener125 {126 public void actionPerformed (ActionEvent event)127 {128 center.setIcon (new ImageIcon("Image//layoutDemoarrowLeft.gif"));129 repaint();130 }131 }132 133 private class Button2Listener implements ActionListener134 {135 public void actionPerformed (ActionEvent event)136 {137 center.setIcon(new ImageIcon("Image//layoutDemoarrowUp.gif"));138 repaint();139 }140 }141 142 private class Button3Listener implements ActionListener143 {144 public void actionPerformed (ActionEvent event)145 {146 center.setIcon(new ImageIcon("Image//layoutDemoarrowDown.gif"));147 repaint();148 }149 }150 151 private class Button4Listener implements ActionListener152 {153 public void actionPerformed (ActionEvent event)154 {155 center.setIcon(new ImageIcon("Image//layoutDemoarrowRight.gif"));156 repaint();157 }158 }159 }160 161 162 163 //定义盒式布局管理器164 class BoxPanel extends JPanel165 {166 /**167 * 168 */169 private static final long serialVersionUID = 1L;170 171 public BoxPanel()172 {173 /*174 就一个构造函数175 BoxLayout (Container target, int axis)176 参数说明:177 target指明要设置次布局方式的容器178 axis设置布局方式,有如下选择:179 BoxLayout.X_AXIS从左到右180 BoxLayout.Y_AXIS从上到下181 BoxLayout.LINE_AXIS182 BoxLayout.PAGE_AXIS183 184 185 */186 setLayout (new BoxLayout (this, BoxLayout.X_AXIS));187 188 setBackground (Color.green);189 190 JButton b1 = new JButton ("BUTTON 1");191 JButton b2 = new JButton ("BUTTON 2");192 JButton b3 = new JButton ("BUTTON 3");193 JButton b4 = new JButton ("BUTTON 4");194 JButton b5 = new JButton ("BUTTON 5");195 /*196 盒式布局管理器的组件间没有间距,可以添加不可见组件到容器中去以便占用空间197 Box类包含静态方法可创建不可见组件,他是在包java.swing中198 Box类定义两种组件:固定大小的和可以伸缩的199 Box的一些静态方法:200 createGlue()//伸缩的,可水平伸缩也可垂直伸缩201 createRigidArea(Dimension d)//固定水平垂直大小202 createHorizontalGlue()//水平伸缩203 createHorizontalStrut(int width)//固定水平大小204 createVerticalGlue()//垂直伸缩205 createVerticalStrut(int height)//固定垂直大小206 207 */208 add (Box.createHorizontalGlue());209 add (b1);210 add (Box.createRigidArea (new Dimension (10,0)));211 add (b2);212 add (b3);213 add (Box.createHorizontalStrut (50));214 add (b4);215 add (Box.createHorizontalGlue());216 add (b5);217 }218 } 219 220 //定义网格布局管理器221 class GridPanel extends JPanel222 {223 /**224 * 225 */226 private static final long serialVersionUID = 1L;227 228 public GridPanel()229 {230 /*231 构造函数:232 GridLayout()//单行多列233 GridLayout(int rows, int cols)234 GridLayout(int rows, int cols, int hgap, int vgap)//行列加水平垂直间隔235 236 237 238 239 */240 241 GridLayout layout = new GridLayout (2,3);242 layout.setRows (3);//当构造函数中已设置了行时此方法无效243 layout.setColumns (4);//当构造函数中已设置了列时此方法无效244 layout.setHgap (5);245 layout.setVgap (5);246 setLayout (layout);247 setBackground (Color.white);248 249 JButton b1 = new JButton ("BUTTON 1");250 JButton b2 = new JButton ("BUTTON 2");251 JButton b3 = new JButton ("BUTTON 3");252 JButton b4 = new JButton ("BUTTON 4");253 JButton b5 = new JButton ("BUTTON 5");254 JButton b6 = new JButton ("BUTTON 6");255 256 257 add (b1);258 add (b2);259 add (b3);260 add (b4);261 add (b5);262 add (b6);263 }264 }
转载请注明原文地址: https://ibbs.8miu.com/read-900245.html