GUI入门(AWT包)
1.1GUI的概述
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。 [1]
图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。
1.2JAVA针对GUI提供了三个包
java.awt 包 – 主要提供字体/布局管理器
javax.swing 包[商业开发常用] – 主要提供各种组件(窗口/按钮/文本框)
java.awt.event 包 – 事件处理,后台功能的实现。
1.3 AWT包下的类及其作用
1.3.1 Frame类
这个类是用来设置窗口的工具类
新建这个类对象就等于新建了一个窗口
举例说明:
package GUI;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class frame {
public static void main(String[] args) {
Frame frame = new Frame("我的第一个窗口");
frame.setVisible(true);//设置可见性
frame.setBounds(400,400,500,500);//设置初始位置和窗口大小
frame.setBackground(Color.BLUE);//设置背景颜色
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
注意以下几点
问题一:new 了一个窗口 运行结果显示不出来
解决方案 :当你new这个窗口时需要设置可见性 : frame.setVisible(true);//设置可见性
如果没有设置可见性的话 你这个窗口是显示不出来的 是隐藏的
问题二:想关闭窗口点击X号没反应:
解决方案:增加一个窗口监听事件: frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
1.3.2 面板类Panel
面板是用来加在窗口里面的
可以看成是一个空间,但是不能单独存在
举例如下:
package GUI;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class panel {
public static void main(String[] args) {
Frame frame = new Frame("我爱JAVA");//创建一个新的窗口
Panel panel = new Panel();//创建一个新的面板
frame.setLayout(null);//设置布局为默认
frame.setBounds(300,300,500,500);//设置窗口的位置和大小
panel.setBounds(200,200,200,200);//设置面板相对于窗口的位置和面板的大小
panel.setBackground(Color.BLUE);//设置面板颜色
frame.add(panel);//把面板添加到窗口里面去
frame.setVisible(true);//窗口可视化
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});//开启窗口监听 使得窗户口可以关闭
}
}
1.3.3三种布局
流式布局(Flowlayout)
是一种从左到右依次排列组件的布局方式
package GUI;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class layout {
public static void main(String[] args) {
//流式布局
Frame frame = new Frame();
frame.setBounds(100,100,200,300);
frame.setLayout( new FlowLayout(FlowLayout.LEFT));//设置流式布局朝左看齐
//创建一些按钮 把按钮加到窗口中去
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.add(button1);
frame.add(button2);
frame.add(button3);
frame.add(button4);
frame.add(button5);
frame.add(button6);
frame.setVisible(true);//设置窗口可视化
//适配器模式 窗口监听使得窗口可以关闭
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});//
}
}
东南西北中布局(Borderlayout)
一种以方向为顺序的布局方式
package GUI;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class bordetlayout {
public static void main(String[] args) {
Frame frame = new Frame("东南西北中布局");
frame.setBounds(200,200,500,500);
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");
frame.add(button1,BorderLayout.EAST);
frame.add(button2,BorderLayout.SOUTH);
frame.add(button3,BorderLayout.WEST);
frame.add(button4,BorderLayout.NORTH);
frame.add(button5,BorderLayout.CENTER);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
表格式布局(Girdlayout)
package GUI;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class girdlayout {
public static void main(String[] args) {
Frame frame = new Frame();
frame.setBounds(200,200,400,400);
frame.setLayout(new GridLayout(2,2));//设置表格布局模式 二行二列
//然后把按钮添加进窗口
Button button1 = new Button();
Button button2 = new Button();
Button button3 = new Button();
Button button4 = new Button();
button1.setBackground(Color.BLUE);
button2.setBackground(Color.GREEN);
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.add(button4);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
1.3.5按钮监听事件
给按钮设立一个监听事件 当按下按钮就会触发这个监听事件
package GUI;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//事件监听
public class ActionEvent {
public static void main(String[] args) {
//按钮监听
Frame frame = new Frame();
frame.setVisible(true);
frame.setBounds(200,200,400,400);
Button button = new Button();
//给这个按钮增加一个监听事件 当按下按钮会触发事件
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("按钮监听事件发生");
}
});
frame.add(button);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});//设置一个窗口监听事件来关闭窗口
}
}
点击按钮 就会输出"按钮监听事件发生"这段话
1.3.6输入框TextField 监听
当你在窗口中的输入框里打一段话就会被监听到 输出出来
package GUI;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//文本监听
public class texttest {
public static void main(String[] args) {
Frame frame = new Frame();
TextField textField = new TextField();//新建一个文本
textField.addActionListener(new mylisten());//给文本增加一个监听事件
frame.add(textField);//把文本添加到窗口中
frame.setVisible(true);
frame.setBounds(200,200,200,200);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
class mylisten implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
TextField textField1 = (TextField) e.getSource();
System.out.println(textField1.getText());
}
}
1.3.7做一个计算器
package GUI;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class calc {
public static void main(String[] args) {
new calcs();
}
}
class calcs extends Frame{
//设置个3本域
TextField textField = new TextField();
TextField textField2 = new TextField();
TextField textField3 = new TextField();
static int num1,num2;//定义三个变量
public calcs(){
setTitle("计算器");
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setVisible(true);//计算器可视化
setBounds(200,200,200,200);//设置计算器窗口的大小
setLayout( new GridLayout(1,5));//设置计算器的布局
//设置一个按钮
Button button = new Button("=");
//设置一个加号图标+
Label label = new Label("+");
//把这些组件添加到窗口中看看效果
add(textField);
add(label);
add(textField2);
add(button);
add(textField3);
//设置按钮监听 当点击按钮 将num1和num2的和给num3
button.addActionListener(new myaction());}
private class myaction implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
num1= Integer.parseInt(textField.getText());
num2=Integer.parseInt(textField2.getText());
textField3.setText(""+(num1+num2));
}
}}