文章目录
AWT
AWT(Abstract Window Toolkit):
抽象窗口工具包。该包提供了一套与本地图形界面进行交互的接口,是Java提供的用来建立和设置Java的图形用户界面的基本工具。
通过学习AWT,我们可以使用Java简单的编辑一些图形界面.
演示1 创建一个窗口
import javax.swing.*;
import java.awt.*;
public class TestDemo2 {
public static void main(String[] args) {
//1.创建一个窗口对象
Frame frame=new Frame("这里是第一个windows窗口");
//2.指定窗口位置,大小
frame.setLocation(100,200);
frame.setSize(500,600);
//3.设置窗口对象可见
frame.setVisible(true);//true是可见 false是不可见
}
}
效果如下:
界面中会弹出一个窗口。窗口中没有任何内容。
演示2-创建panel
import java.awt.*;
public class TestDemo200 {
public static void main(String[] args) {
//1.创建一个window对象 注:panel以及其他的容器,都不能独立存在,必须依附于window存在
Frame frame=new Frame("这里演示Panel");
//2.创建一个Panel对象
Panel p=new Panel();
//3.创建一个文本框和一个按钮,并添加到Panel容器中
p.add(new TextField("这是一个文本框"));
p.add(new Button("这是一个测试按钮"));
//4.把panel添加到windows当中
frame.add(p);
//5.设置window的位置及大小
frame.setBounds(300,400,500,500);
//6.设置window可见
frame.setVisible(true);
}
}
运行结果:
演示3 创建ScrollPane
import java.awt.*;
public class ScrollPaneDemo {
public static void main(String[] args) {
//创建窗口
Frame frame=new Frame("这是一个新的窗口");
//1.创建一个ScrollPane对象
ScrollPane scrollPane=new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
//2.往ScrollPane中添加内容
scrollPane.add(new TextField("这是文本框!"));
scrollPane.add(new Button("这是一个按钮!"));
//3.将ScrollPane对象添加到窗口中
frame.add(scrollPane);
//设置位置及大小
frame.setBounds(200,300,500,600);
//设置可见
frame.setVisible(true);
}
}
运行结果:
注意:运行结果中只显示了按钮,未显示文本框的原因是windows默认的布局管理器的不同。之后会详细介绍。
LayoutManager布局管理器
在程序中创建一个标签或者按钮时,操作系统生成的标签或者按钮会自适应大小,这个大小叫最佳大小。即宽和高的像素恰好可以覆盖我们输入的文字或数据。但不同的操作系统中为了达到同一个效果可能需要的像素值不同,如在windows操作系统中需要100px,但在linux中可能需要200px。Java为了能在不同的操作系统上运行且不需要修改代码就能达到同样的效果,引入了LayoutManager布局管理器,即程序员通过使用布局管理器就可以产生一个合适的大小,且在不同的平台上都能运行 ,也无需手动输入宽和高之类的数据了。
演示4 FlowLayout布局管理
FlowLayout是LayoutManager的一种,操作系统执行时会像流水一样扩展,碰到边界就会返回。
import java.awt.*;
public class FlowLayoutDemo {
public static void main(String[] args) {
Frame frame=new Frame("这里测试FlowLayout");
//1.通过setLayout方法设置布局管理器
//FlowLayout.LEFT 从左开始扩展 水平间距和垂直间距都设置为20.
frame.setLayout(new FlowLayout(FlowLayout.LEFT,20,20));
//2.添加多个按钮到Frame中
for (int i = 1; i <= 100; i++) {
frame.add(new Button("按钮"+i));
}
//3.设置最佳大小 pack方法
frame.pack();
frame.setVisible(true);
}
}
运行效果:
演示5 BorderLayout布局管理
BorderLayout会将容器分为五个区域:EAST、NORTH、CENTER、 SOUTH、WEST。如图。普通组件可以放在任何一个区域中。
注意:
1.使用BorderLayout向容器中添加组件时,需要指定添加到哪个区域中,如未指定,则添加至center区域
2.向同一个区域添加多个组件时,后添加的组件会覆盖前一个
3.当某一个区域未添加任何内容时,其他区域会占满该区域
4.windows系统的默认布局管理器就是BorderLayout。
演示:
import java.awt.*;
public class BorderLayoutDemo {
public static void main(String[] args) {
Frame frame=new Frame("这里测试BorderLayout布局管理");
//1.给frame设置布局管理器
frame.setLayout(new BorderLayout(30,30));
//2在frame指定的区域添加组件
frame.add(new Button("北侧按钮"),BorderLayout.NORTH);
frame.add(new Button("东侧按钮"),BorderLayout.EAST);
frame.add(new Button("西侧按钮"),BorderLayout.WEST);
frame.add(new Button("南侧按钮"),BorderLayout.SOUTH);
frame.add(new Button("中间按钮"),BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
运行结果:
演示6 GirdLayout布局管理
GirdLayout将容器划分成表格。
演示实现一个计算器界面:
import java.awt.*;
public class GridLayoutDemo {
public static void main(String[] args) {
Frame frame=new Frame("计算器");
//1.创建一个Panel对象,里面存放TextFiled组件
Panel p=new Panel();
p.add(new TextField(30));//可存放30个字符
//2.把当前这个Panel添加到frame的北边区域
frame.add(p,BorderLayout.NORTH);
//3.创建一个Panel对象,并设置它的布局管理器为GridLayout
Panel p2=new Panel();
p2.setLayout(new GridLayout(3,5,4,4));
//往Panel中添加内容
for(int i=0;i<10;i++){
p2.add(new Button(i+""));
}
p2.add(new Button("+"));
p2.add(new Button("-"));
p2.add(new Button("*"));
p2.add(new Button("/"));
p2.add(new Button("."));
frame.add(p2);
frame.pack();
frame.setVisible(true);
}
}
运行结果:
演示8 CardLayout布局管理
CardLayout,卡片布局管理器。它将容器中的每个组件看作一张卡片,一次只能看到一张卡片,容器则充当卡片的堆栈,默认显示第一张卡片。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CardLayoutDemo {
public static void main(String[] args) {
Frame frame=new Frame("这里测试CardLayout");
//1.创建一个Panel,用来储存多张卡片
Panel p1=new Panel();
//2.创建CardLayout对象,并且把该对象设置给之前创建的容器
CardLayout cardLayout=new CardLayout();
p1.setLayout(cardLayout);
//3.往panel中储存多个组件
String[]names={"第一张","第二张","第三张","第四张","第五张"};
for (int i = 0; i < names.length; i++) {
p1.add(names[i],new Button(names[i]));
}
//4.把panel放到frame的中间区域
frame.add(p1);
//5.创建另外一个panel,p2 用来储存多个按钮组件
Panel p2=new Panel();
//6.创建5个按钮组件
Button b1=new Button("上一张");
Button b2=new Button("下一张");
Button b3=new Button("第一张");
Button b4=new Button("最后一张");
Button b5=new Button("第三张");
//7.创建一个事件监听器,监听按钮的点击动作
ActionListener liseter =new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String actionCommand=e.getActionCommand();
//这个字符串就是按钮上的文字
switch (actionCommand){
case "上一张":
cardLayout.previous(p1);
break;
case "下一张":
cardLayout.next(p1);
break;
case "第一张":
cardLayout.first(p1);
break;
case "最后一张":
cardLayout.last(p1);
break;
case "第三张":
cardLayout.show(p1,"第三张");
break;
}
}
};
//8.把当前这个时间监听器和多个按钮绑定到一起
b1.addActionListener(liseter);
b2.addActionListener(liseter);
b3.addActionListener(liseter);
b4.addActionListener(liseter);
b5.addActionListener(liseter);
//9.把按钮添加到容器p2中
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(b4);
p2.add(b5);
//10.把p2放到frame的南边区域
frame.add(p2,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
}
运行效果:
演示9 BoxLayout箱式布局管理
BoxLayout是箱式布局管理,它把若干组件按照水平或者垂直的方式依次排列在容器中。BoxLayout并不在awt包底下,而是在swing包底下。
import java.awt.*;
import javax.swing.*;
public class BoxLayoutDemo {
public static void main(String[] args) {
Frame frame=new Frame("这是一个frame容器");
//1.基于frame容器,创建一个BoxLayout对象,并且,该对象存放组件是垂直存放
//此处的Y_AXIS表示垂直布局
//X_AXIS表示水平布局
BoxLayout boxLayout=new BoxLayout(frame,BoxLayout.Y_AXIS);
frame.setLayout(boxLayout);
//2.把BoxLayout对象设置给frame
//3.向frame中添加两个按钮
frame.add(new Button("按钮1"));
frame.add(new Button("按钮2"));
frame.pack();
frame.setVisible(true);
}
}
运行效果:
垂直:
水平:
刚才的代码演示,我们的思路是创建frame容器,然后把frame容器的布局管理改成BoxLayout。其实在java.swing包中,已经提供了一个新的容器Box,而该容器的默认布局管理就是BoxLayout,在实际开发中,我们都会直接创建一个Box容器去容纳很多的GUI组件,然后把这个Box容器再添加到其他的容器中,形成整体的布局。
使用方法:
// 创建一个水平容器
Box hBox = Box.createHorizontalBox();
// 创建一个垂直容器
Box vBox = Box.createVerticalBox();
使用示例1:
import javax.swing.*;
import java.awt.*;
public class BoxLayoutDemo2 {
public static void main(String[] args) {
Frame frame=new Frame("这是一个新的窗口");
//1.创建一个水平的容器
Box hBox=Box.createHorizontalBox();
//2.往该容器中添加两个按钮
hBox.add(new Button("水平按钮1"));
hBox.add(new Button("水平按钮2"));
//3.创建一个垂直的容器
Box vBox=Box.createVerticalBox();
//4.往该容器中添加两个按钮
vBox.add(new Button("垂直按钮1"));
vBox.add(new Button("垂直按钮2"));
//5.将这两个容器添加到frame容器中
frame.add(hBox,BorderLayout.NORTH);
frame.add(vBox);
frame.pack();
frame.setVisible(true);
}
}
运行结果:
使用示例2:
向组件之间添加空白分割
import javax.swing.*;
import java.awt.*;
public class BoxLayoutDemo3 {
public static void main(String[] args) {
Frame frame=new Frame();
//1.创建一个水平box容器,里面添加两个按钮和两个水平空格
Box hBox=Box.createHorizontalBox();
hBox.add(new Button("水平按钮1"));
//添加水平空白分割
hBox.add(Box.createHorizontalBox());
hBox.add(new Button("水平按钮2"));
//添加水平空白分割 宽度不变
hBox.add(Box.createHorizontalStrut(30));
hBox.add(new Button("水平按钮3"));
//2.将该容器放到frame容器北。
frame.add(hBox,BorderLayout.NORTH);
//3.创建一个垂直box容器,里面添加三个按钮,和两个水平空格。
Box vBox=Box.createVerticalBox();
vBox.add(new Button("垂直按钮1"));
//添加垂直空白分割 高度不变
vBox.add(Box.createVerticalStrut(30));
vBox.add(new Button("垂直按钮2"));
//添加垂直空白分割
vBox.add(Box.createVerticalBox());
vBox.add(new Button("垂直按钮3"));
//4.将该容器放到frame南。
frame.add(vBox,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
}
运行效果如下:
可以看到拉伸过程中空白分割的变化