组件
窗口
弹窗
面板
文本框
列表框
按钮
图片
监听事件
鼠标
键盘监听
1.简介
GUI的核心技术:Swing,AWT
2.AWT
2.1、AWT简介
1.包含很多类和接口。GUI
2.元素:窗口,按钮,文本框
3.java.awt包
2.2、组件和容器
Frame:
package com.zzk.demo;
import java.awt.*;
//GUI的第一个界面,
public class TestFrame {
public static void main(String[] args) {
//frame,jdk 看源码
Frame frame = new Frame("这是一个窗口的标题");
//设置可见性
frame.setVisible(true);
//设置窗口大小
frame.setSize(400,400);
//设置颜色
frame.setBackground(Color.pink);
//设置弹出位置
frame.setLocation(20,20);
//设置不可调节大小
frame.setResizable(false);
}
}
设置多个窗口:
面板Panel
package com.zzk.panel;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//面板,可以看成是一个空间,但是不能单独存在
public class TestPanel {
public static void main(String[] args) {
Frame frame = new Frame();
Panel panel = new Panel();
//设置布局
frame.setLayout(null);
//设置坐标
frame.setBounds(200,200,500,500);
frame.setBackground(new Color(20));
//panel设置坐标,设置颜色
panel.setBounds(20,20,500,500);
panel.setBackground(Color.CYAN);
//窗口上画面版
frame.add(panel);
frame.setVisible(true);
//监听时间,监听窗口关闭时间 System.exit
//适配器模式 new WindowsAdapter
frame.addWindowListener(new WindowAdapter() {
//窗口点击关闭的时候需要做的事情
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
布局管理器
流式布局
package com.zzk.layout;
import java.awt.*;
public class TestFlowLayout {
public static void main(String[] args) {
Frame frame = new Frame();
Button button1 = new Button("Button1");
Button button2 = new Button("Button2");
Button button3 = new Button("Button3");
//设置流式布局
//frame.setLayout(new FlowLayout());
//frame.setLayout(new FlowLayout(FlowLayout.RIGHT));
frame.setLayout(new FlowLayout(FlowLayout.LEFT));
frame.setVisible(true);
frame.setSize(200,200);
frame.add(button1);
frame.add(button2);
frame.add(button3);
}
}
东西南北中
package com.zzk.layout;
import java.awt.*;
public class TestBorderLayout {
public static void main(String[] args) {
Frame frame = new Frame();
Button north= new Button("north");
Button south= new Button("south");
Button west= new Button("west");
Button east= new Button("east");
Button center= new Button("cantor");
//四周布局
frame.add(north,BorderLayout.NORTH);
frame.add(south,BorderLayout.SOUTH);
frame.add(west,BorderLayout.WEST);
frame.add(east,BorderLayout.EAST);
frame.add(center,BorderLayout.CENTER);
frame.setSize(200,200);
frame.setVisible(true);
}
}
表格式布局
package com.zzk.layout;
import java.awt.*;
public class TestGridLayout {
public static void main(String[] args) {
Frame frame = new Frame();
Button bt1= new Button("bt1");
Button bt2= new Button("bt2");
Button bt3= new Button("bt3");
Button bt4= new Button("bt4");
Button bt5= new Button("bt5");
Button bt6= new Button("bt6");
//表格流布局,3行2列
frame.setLayout(new GridLayout(3,2));
frame.add(bt1);
frame.add(bt2);
frame.add(bt3);
frame.add(bt4);
frame.add(bt5);
frame.add(bt6);
frame.setVisible(true);
frame.setSize(200,200);
}
}
事件监听
package com.zzk.action;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestActionEvent {
public static void main(String[] args) {
//按下按钮,触发事件
Frame frame = new Frame();
Button button = new Button("Button");
frame.setSize(200,200);
frame.add(button,BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
//需要监听器,ActionLister
MyActionLister myActionLister = new MyActionLister();
button.addActionListener(myActionLister);
}
static class MyActionLister implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("按下了按钮");
}
}
}
关闭窗口事件
windowsClose(frame);//关闭窗口
}
//窗口关闭事件
public static void windowsClose(Frame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
多个按钮共享一个事件
package com.zzk.action;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestActionEvent2 {
public static void main(String[] args) {
//两个按钮,实现同一个监听
// 开始停止
Frame frame = new Frame("开始,停止");
Button button1 = new Button("Start");
Button button2 = new Button("Stop");
frame.add(button1,BorderLayout.EAST);
frame.add(button2,BorderLayout.WEST);
Mymsg mymsg = new Mymsg();
button1.addActionListener(mymsg);
button2.addActionListener(mymsg);
frame.setVisible(true);
frame.pack();
}
static class Mymsg implements ActionListener {
@Override
//e.getActionCommand() 获取按键信息
public void actionPerformed(ActionEvent e) {
System.out.println("按下了"+e.getActionCommand());
}
}
}
输入框TextField监听
package com.zzk.text;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestText {
public static void main(String[] args) {
new MyFrame();
}
}
class MyFrame extends Frame{
public MyFrame(){
setVisible(true);
//创建文本输入框
TextField textField = new TextField();
add(textField);
MyActionListener myActionListener = new MyActionListener();
//输入框的监听
textField.addActionListener(myActionListener);
//设置替换编码,星号,用于密码输入
textField.setEchoChar('*');
pack();
}
}
class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
TextField field = (TextField) e.getSource();//获得一些资源,返回这个对象
System.out.println(field.getText());
field.setText("");//回车清空
}
}
简易的计算器
oop原则:组合大于继承。
原来的简易的代码:
package com.zzk.text;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//简易的计算器
public class Calculator {
public static void main(String[] args) {
new MyFrame2();
}
}
//窗口类
class MyFrame2 extends Frame{
public MyFrame2(){
setVisible(true);
setBounds(200,200,500,100);
//三个文本框
TextField field1 = new TextField(10);//字符数
TextField field2 = new TextField(10);
TextField field3 = new TextField(20);
//一个按钮
Button button = new Button("=");
//按钮设置监听,传参。
button.addActionListener(new MyActionListener2(field1,field2,field3));
//一个标签
Label label = new Label("+");
//设置流式布局
setLayout(new FlowLayout(FlowLayout.LEFT));
add(field1);
add(label);
add(field2);
add(button);
add(field3);
pack();
}
}
//监听器
class MyActionListener2 implements ActionListener{
//获取三个变量
private TextField num1,num2,num3;
public MyActionListener2(TextField num1,TextField num2,TextField num3) {
this.num1=num1;
this.num2=num2;
this.num3=num3;
}
@Override
public void actionPerformed(ActionEvent e) {
//获得加数和被加数
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
//将值进行加法运算
num3.setText(""+(n1+n2));
//消除前两个框
num1.setText("");
num2.setText("");
}
}
代码优化,改造为面向对象,组合:
ackage com.zzk.text;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//简易的计算器
public class Calculator {
public static void main(String[] args) {
MyFrame2 myFrame2 = new MyFrame2();
myFrame2.newFrame();
}
}
//窗口类
class MyFrame2 extends Frame{
TextField field1;
TextField field2;
TextField field3;
//方法
public void newFrame(){
setVisible(true);
setBounds(200,200,500,100);
//三个文本框
field1 = new TextField(10);//字符数
field2 = new TextField(10);
field3 = new TextField(20);
//一个按钮
Button button = new Button("=");
//按钮设置监听,传参。
button.addActionListener(new MyActionListener2(this));
//一个标签
Label label = new Label("+");
//设置流式布局
setLayout(new FlowLayout(FlowLayout.LEFT));
add(field1);
add(label);
add(field2);
add(button);
add(field3);
pack();
}
}
//监听器
class MyActionListener2 implements ActionListener{
//获取计算器这个对象,在一个类中组合另一个类
MyFrame2 myFrame2=null;
public MyActionListener2( MyFrame2 myFrame2) {
this.myFrame2=myFrame2;
}
@Override
public void actionPerformed(ActionEvent e) {
//获得加数和被加数
int n1 = Integer.parseInt(myFrame2.field1.getText());
int n2 = Integer.parseInt(myFrame2.field2.getText());
//将值进行加法运算
myFrame2.field3.setText(""+(n1+n2));
//消除前两个框
myFrame2.field2.setText("");
myFrame2.field2.setText("");
}
}
内部类,更好的包装
package com.zzk.text;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//简易的计算器
public class Calculator {
public static void main(String[] args) {
MyFrame2 myFrame2 = new MyFrame2();
myFrame2.newFrame();
}
}
//窗口类
class MyFrame2 extends Frame{
TextField field1;
TextField field2;
TextField field3;
//方法
public void newFrame(){
setVisible(true);
setBounds(200,200,500,100);
//三个文本框
field1 = new TextField(10);//字符数
field2 = new TextField(10);
field3 = new TextField(20);
//一个按钮
Button button = new Button("=");
//按钮设置监听,传参。
button.addActionListener(new MyActionListener2());
//一个标签
Label label = new Label("+");
//设置流式布局
setLayout(new FlowLayout(FlowLayout.LEFT));
add(field1);
add(label);
add(field2);
add(button);
add(field3);
pack();
}
//监听器类
//内部类,最大的好处就是畅通无阻地访问外部的属性和方法
private class MyActionListener2 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//获得加数和被加数
int n1 = Integer.parseInt(field1.getText());
int n2 = Integer.parseInt(field2.getText());
//将值进行加法运算
field3.setText(""+(n1+n2));
//消除前两个框
field2.setText("");
field2.setText("");
}
}
}
画笔
class MyPaint extends Frame{
@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.RED);
g.fill3DRect(50, 50, 50, 50,true);
}
}
按钮控制窗口背景颜色
package com.zzk.mydemo;
import java.awt.*;
import java.awt.event.ActionEvent;
public class Testdemo {
public static void main(String[] args) {
new NewFrame();
}
}
class NewFrame extends Frame {
public NewFrame(){
Button button1 = new Button("red");
Button button2 = new Button("green");
setLayout(new FlowLayout(FlowLayout.LEFT));
setBounds(200,200,550,550);
setVisible(true);
add(button1);
add(button2);
pack();
button1.addActionListener(this::actionPerformed);
button2.addActionListener(this::actionPerformed);
}
Color color;
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("red") ){
color=Color.red;
setBackground(color);
}else if (e.getActionCommand().equals ("green")){
color=Color.green;
setBackground(color);
}
}
}
停更,群友成功劝退,用到再学