java学习笔记 布局管理器

不设布局管理器(把默认布局管理器设为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显示出来?
*/

显示:

r1

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);
    }    
}

显示

r2

练习:创建一个图形,显示如下

r3

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);
    }    
}
显示:

r4

注意:使用布局管理器时,布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件大小和位置属性,如果试图使用Java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖,就是全权交给布局管理器来处理。

原文地址:https://www.cnblogs.com/yhwsy/p/5848428.html