GUI-lesson2
本帖最后由 愷龍 于 2021-9-19 15:47 编辑Panel 面板:
Panel 必须存在与容器中显示 不能独立显示
Panel 面板和 Frame 窗口用法基本一致
通过 add 来进行添加一些组件
四种布局模式:
frame.setLayout(LayoutManager mgr)//参数为LayoutManage对象LayouMannager是一个接口
BorderLayout 类 东南西北中布局模式
import java.awt.*;
public class TestBorderLayout {
public static void main(String[] args) {
Frame frame = new Frame("东西南北中");
Button button1 = new Button("East");
Button button2 = new Button("west");
Button button3 = new Button("south");
Button button4 = new Button("north");
Button button5 = new Button("center");
//添加东西南北中效果
frame.add(button1,BorderLayout.EAST);
frame.add(button2,BorderLayout.WEST);
frame.add(button3,BorderLayout.SOUTH);
frame.add(button4,BorderLayout.NORTH);
frame.add(button5,BorderLayout.CENTER);
frame.setSize(526,526);
frame.setVisible(true);
}
}
https://www.hualigs.cn/image/61469db84363a.jpg
FlowLayout 类 流式布局模式 从左到右 从上到下
import java.awt.*;
public class TestFlowLayout {
public static void main(String[] args) {
Frame frame = new Frame();
//设置按钮
Button button = new Button("yuyan1");
Button button1 = new Button("yuyan2");
Button button2 = new Button("yuyan3");
//设置为流式布局
frame.setLayout(new FlowLayout()); //默认居中
// frame.setLayout(new FlowLayout(FlowLayout.LEFT));//左
//添加按钮
frame.add(button);
frame.add(button1);
frame.add(button2);
//显示
frame.setVisible(true);
}
}
https://www.hualigs.cn/image/61469c899a9a3.jpg
GridLayout 类 栅格式布局模式 表格模式 几行几列
import java.awt.*;
public class TestGridLayout {
public static void main(String[] args) {
Frame frame = new Frame("表格布局");
Button button1 = new Button("1");
Button button2 = new Button("2");
Button button3 = new Button("3");
Button button4 = new Button("4");
Button button5 = new Button("5");
Button button6 = new Button("6");
//设置行列
frame.setLayout(new GridLayout(3,2));
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.add(button4);
frame.add(button5);
frame.add(button6);
//Java的函数,自动布局
frame.pack();
frame.setVisible(true);
}
}
https://z3.ax1x.com/2021/09/19/43SeAI.png
这三个类都是 LayouManager 接口的实现类
frame.setLayout(new FlowLayout());//流式布局组件呈流失分布 从左向右 从上到下
frame.setLayout(new BorderLayout(int hgap, int vgap))//东南西北中布局组件呈特定方向排布默认为中 center
frame.setLayout(new GridLayout(int rows, int cols, int hgap, int vgap))//将窗口分成几行几列的表单 每个组件占一格分布 //hgap vgap 为容器内行 列 间隔 可以不填默认无间隔
具体用法:
Button b=new Button("我是按钮组件");
frame.add(b); //自动流式布局
frame.add(b,BoderLayout.WEST); //将按钮向西排列布局 BoderLayout类中已经设置好了布局位置的静态常量可以直接调用
//BoderLayout.EAST : 东 BoderLayout.CENTER: 中
frame.setLayout(new GridLayout(2,2))//栅格布局 将窗口分为两行两列
frame.add(b) //按钮位置在窗口左上方 占窗口四分之一大小
上面是三种布局模式
绝对定位布局:
根据组件设置的坐标 自动相对于窗口定位
设置坐标: 1. setLocation (int : x , int : y) 2. setBounds (int : x , int : y ,int : width , int : height)
frame.setLayout(null) //绝对定位
Button b=new Button("按钮")
b.setLocation(100,100); //设置按钮在窗口内的位置坐标
frame.add(b) //将按钮添加到窗口上按钮在 x 为100Y 为100的位置上
面板:
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public class TestPanel {
public static void main(String[] args) {
Frame frame = new Frame();
Panel panel = new Panel();
//设置布局
frame.setLayout(null);
//坐标
frame.setBounds(300, 300, 500, 500);
frame.setBackground(Color.GREEN);
//panel设置左边,相对于frame
panel.setBounds(50, 50, 400, 400);
panel.setBackground(Color.RED);
//frame.add(panel)
frame.add(panel);
frame.setVisible(true);
//监听事件,监听窗口关闭事件system.exit(0)
//适配器模式
frame.addWindowListener(new WindowAdapter(){
//窗口点击关闭时需要做的事情
public void windowClosing(WindowEvent e){
//结束程序
System.exit(0);
}
});
}
}
https://z3.ax1x.com/2021/08/25/hZnwDS.png
一个小实践
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Test {
public static void main(String[] args) {
Frame frame = new Frame("作业");
frame.setSize(526,526);
Panel panel = new Panel();
Panel panel1 = new Panel();
Panel panel2 = new Panel();
Panel panel3 = new Panel();
panel.setBounds(0,0,50,526);
panel1.setBounds(50,0,426,263);
panel2.setBounds(50,263,426,263);
panel3.setBounds(476,0,50,526);
//便于区分
panel.setBackground(new Color(58, 65, 219));
panel1.setBackground(new Color(21, 220, 151));
panel2.setBackground(new Color(224, 208, 63));
panel3.setBackground(new Color(231, 125, 98));
frame.add(panel);
frame.add(panel1);
frame.add(panel2);
frame.add(panel3);
Button button1 = new Button("1");
Button button2 = new Button("2");
Button button3 = new Button("3");
Button button4 = new Button("4");
Button button5 = new Button("5");
Button button6 = new Button("6");
Button button7 = new Button("7");
Button button8 = new Button("8");
Button button9 = new Button("9");
Button button10 = new Button("10");
panel.setLayout(new GridLayout(2,1));
panel1.setLayout(new GridLayout(2,1));
panel2.setLayout(new GridLayout(2,2));
panel3.setLayout(new GridLayout(2,1));
panel.add(button1);
panel.add(button2);
panel1.add(button3);
panel1.add(button4);
panel2.add(button5);
panel2.add(button6);
panel2.add(button7);
panel2.add(button8);
panel3.add(button9);
panel3.add(button10);
//监听事件,监听窗口关闭事件System.exit(0)
//适配器模式:
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
//结束程序
System.exit(0);
}
});
frame.pack();
//frame.setResizable(false);
frame.setVisible(true);
}
}
https://www.hualigs.cn/image/6146eafa9648f.jpghttps://cdn.jsdelivr.net/gh/master-of-forums/master-of-forums/public/images/patch.gif
页:
[1]