目录
什么是GUI
GUI就是图形用户界面,Java中的图形用户界面由各种组件component组成,这些组件包括输入框(TextField).标签(Label),按钮(Button),容器(Container)等.
这些组件一般都在Java.awt包和javax.swing包.
早期JDK版本中java停工了AWT抽象窗口工具,但是由于功能有限,所以提供了Swing,这个功能性更强的工具.
Swing中的主要组件
顶级容器
JFrame:是一个带有标题行和控制按钮的窗口
JApplet:创建小应用程序时使用,它被包含在浏览器窗口中。
JDialog:创建对话框时使用。
JWindow:是一个不带有标题行和控制按钮的窗口
面板:面板(JPanel)是也是一个容器,但是与顶级容器不同的是,面板不能单独存在,只能加到其他容器内部,比如可以添加到JFrame上,面板可以嵌套面板.
布局
容器中包含各种组件,这些组件通常有不同的方式布局在这些容器中,每一个容器一般都有一个固定的布局管理器,Set Layout()方法可以改变容器的布局
FlowLayout(流式布局)
BorderLayout(边界布局)
Gridlayout(网格布局)
null(空布局)
事件处理
所谓事件处理就是接收用户的信息,并生成一个事件对象,这些信息包括用户鼠标的单击或者双击,此时就生成一个ActionEvent事件的类对象.除了接收对象的信息,并创建一个对象,还得有一个监听程序的接口,这个接口规定了接收该方法并做出回应的方法规范.上面的单击按钮,生成一个ActionEvent对象后,程序就会执行一个ActionListener监听接口中的actionPerformed方法
下面创建一个窗口,同时包含事件处理的功能
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* Created with IntelliJ IDEA.
* Description:
* User: z'm
* Date: 2022-09-13
* Time: 20:22
*/
public class Demo1 extends JFrame implements ActionListener {
//显示提示信息的文本框
JTextField textInfo;
/**
* 构造函数,初始话窗口
*/
public Demo1(){
setSize(300,200);
setLocationRelativeTo(null);
setLayout(null);
JButton bok = new JButton("Ok");
//ok按钮左上角的坐标[20,30],宽100.高30
bok.setBounds(20,30,100,30);
//设置按钮标识符为OkCmd,用来识别ok按钮
bok.setActionCommand("OkCmd");
//添加对ok按钮监听,参数是一个实现监听接口类的对象
bok.addActionListener(this);//本类以实现的接口
JButton bcancel = new JButton("Cancel");
bcancel.setBounds(150,30,100,30);
bcancel.setActionCommand("CancelCmd");
//添加对Cancel按钮监听,参数是一个实现监听接口类的队形
bcancel.addActionListener(this);
//标签:动作
JLabel label = new JLabel("动作");
label.setBounds(30,80,30,30);
//显示结果的文本框
textInfo = new JTextField("");
textInfo.setBounds(60,80,200,30);
//设置关闭窗口的操作为关闭窗口并结束程序运行
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//把ok按钮添加到窗口中
add(bok);
add(bcancel);
add(label);
add(textInfo);
setVisible(true);
}
public static void main(String[] args) {
new Demo1();
}
//重写ActionListener接口中的抽象方法
public void actionPerformed(ActionEvent e) {
//被监听的组件有动作发生,首先获取动作指令
String actionCommand = e.getActionCommand();
switch (actionCommand) {
case "OkCmd":
textInfo.setText("按下OK按钮");
break;
case "CancelCmd":
textInfo.setText("按下Cancel按钮");
break;
}
}
}