不设布局管理器(把默认布局管理器设为null),手动设置frame里面图形元素位置,则不会根据frame的大小而做出位置的调整
FlowLayout
flowLayout是Panel类的默认布局管理器,flow表示流水,默认对齐方式是居中
import java.awt.*; public class Test { public static void main(String[] args) { Frame f1 = new Frame(); f1.setSize(300,200); //f1.setLayout(new FlowLayout()); //f1.setLayout(new FlowLayout(FlowLayout.LEFT)); //f1.setLayout(new FlowLayout(FlowLayout.LEADING)); //f1.setLayout(new FlowLayout(FlowLayout.TRAILING)); f1.setLayout(new FlowLayout(FlowLayout.CENTER,50,50)); f1.setBackground(Color.LIGHT_GRAY); Button b1 = new Button(); Button b2 = new Button(); Button b3 = new Button(); Button b4 = new Button(); Button b5 = new Button("b5"); f1.add(b1); f1.add(b2); f1.add(b3); f1.add(b4); f1.add(b5); f1.setVisible(true); } } /* 1.在panel里面添加 button 如何让button显示出来? */
显示:
BorderLayout
BorderLayout是Frame类的默认布局管理器,BorderLayout将整个容器的布局划分成 :东 EAST 、西 WEST、南SOUTH、北NORTH、中CENTER五个区域,如不指定加入容器区域,则默认加入CERNTER。
每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖
BorderLayout型布局管理器缩放原则:北南两个区域在水平方向上缩放,东西两个区域在垂直方向上缩放,中部在两个方向上缩放。
import java.awt.*; public class Test { public static void main(String[] args) { Frame f1 = new Frame(); //f1.setSize(200,150); //如果不设定frame的大小 f1.pack(); f1.setBackground(Color.BLACK); f1.setLayout(new GridLayout(4,2)); Button b1 = new Button("E"); Button b2 = new Button("W"); Button b3 = new Button("S"); Button b4 = new Button("N"); Button b5 = new Button("C"); f1.add(b1); f1.add(b2); f1.add(b3); f1.add(b4); f1.add(b5); f1.setVisible(true); } }
显示
练习:创建一个图形,显示如下
import java.awt.*; public class Test { public static void main(String[] args) { Frame f1 = new Frame(); f1.setSize(600,400); Panel p1 = new Panel(); Panel p2 = new Panel(); p1.setBackground(Color.YELLOW); p2.setBackground(Color.YELLOW); f1.setLayout(new GridLayout(2,1)); p1.setLayout(new BorderLayout()); Panel p3 = new Panel(); p1.add(new Button("Button"),BorderLayout.EAST); p1.add(new Button("Button"),BorderLayout.WEST); p1.add(p3,BorderLayout.CENTER); p3.setLayout(new GridLayout(2,1)); p3.add(new Button("Button")); p3.add(new Button("Button")); f1.add(p1); p2.setLayout(new BorderLayout()); Panel p4 = new Panel(); p2.add(new Button("Button"),BorderLayout.EAST); p2.add(new Button("Button"),BorderLayout.WEST); p2.add(p4,BorderLayout.CENTER); p4.setLayout(new GridLayout(2,2)); p4.add(new Button("Button")); p4.add(new Button("Button")); p4.add(new Button("Button")); p4.add(new Button("Button")); f1.add(p2); f1.setVisible(true); } }
注意:使用布局管理器时,布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件大小和位置属性,如果试图使用Java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖,就是全权交给布局管理器来处理。