8 GUI实例

GUI

1 Frame

用来创建窗口,构造函数如下:

  • public Frame() throws HeadlessException
  • public Frame(String title) throws HeadlessException

常用方法如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FwObPm3i-1672287849963)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221106175224971.png)]

public class gui_v1 {
    public static void main(String[] args) {
        Frame f = new Frame();
        f.setTitle("啊八八八八吧");
        f.setLocation(1000,500);
        f.setSize(300,300);
        f.setVisible(true);
    }
}

2 Button和TextField

2.1 Button

用来创建按钮,构造方法是Button(String label)

public class gui_v1 {
    public static void main(String[] args) {
        Frame f = new Frame();
        Button b = new Button("abc");
        f.setTitle("啊八八八八吧");
        f.setLocation(1000,500);
        f.setSize(300,300);
        f.add(b);
        f.setVisible(true);
    }
}

2.2 TextField

用来创建一个单行的编辑框,常用构造方法是:

  • public TextField() throws HeadlessException
  • public TextField(String text) throws HeadlessException
public class gui_v2 {
    public static void main(String[] args) {
        Frame f = new Frame("im learning");
        TextField t = new TextField("im text");
        f.setLocation(500,500);
        f.setSize(300,300);
        f.add(t);
        f.setVisible(true);
    }
}

3 Component

是能够在屏幕上显示的图形化的表现形式,能够和用户进行交互

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-50VEmnkz-1672287849964)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221106180650987.png)]

4 布局管理器

布局管理器是Java对象,作用是管理组件的布局。Container是提供setLayout()方法进行布局设置。

public class Container_v1 {
    public static void main(String[] args) {
        Frame f = new Frame("im studting!");
        Button b1 = new Button("abc");
        Button b2 = new Button("def");
        FlowLayout fl = new FlowLayout();

        f.setSize(1000,500);
        f.setLocation(300,300);
        f.setLayout(fl);

        f.add(b1);
        f.add(b2);
        f.setVisible(true);
    }
}
  1. Flowlayout

将容器中的组件逐行排列,一行排满之后再换行。可以设置空间间距及对齐方式

  1. Borderlayout

将容器划分东西南北中,每个区域只能放一个组件

Frame和diago是默认的Borderlayout

public class Container_v3 {
    public static void main(String[] args) {
        Frame f = new Frame();
        Button b1 = new Button("b1");
        Button b2 = new Button("b2");
        Button b3 = new Button("b3");
        Button b4 = new Button("b4");
        Button b5 = new Button("b5");

        f.setSize(1000,500);
        f.setLocation(300,300);
        f.add(b1,BorderLayout.EAST);
        f.add(b2,BorderLayout.CENTER);
        f.add(b3,BorderLayout.NORTH);
        f.add(b4,BorderLayout.WEST);
        f.add(b5,BorderLayout.SOUTH);

        f.setVisible(true);
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NU0PG7Pt-1672287849965)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221106204743771.png)]

5 Dialog和panel

dialog就是对话框,都是window的子类,与Frame的主要区别在于Frame可以包含菜单栏,Dialog是不能包含菜单栏的。

dialog不可以作为主界面,必须具备拥有者,作为特定功能为用户交互。

public class dialog_v1 {
    public static void main(String[] args) {
        Frame f = new Frame();
        Dialog d = new Dialog(f);
        d.setSize(1000,500);
        d.setLocation(300,300);
        d.setVisible(true);
    }
}

Panel是container但是不是window,必须附着再顶层容器之上。默认布局管理器是Flowlayout

public class panel_v1 {
    public static void main(String[] args) {
        Frame f = new Frame();
        Panel p1 = new Panel();
        Panel p2 = new Panel();
        Button b1 = new Button("b1");
        Button b2 = new Button("b2");
        Button b3 = new Button("b3");
        Button b4 = new Button("b4");
        Button b5 = new Button("b5");
        f.setSize(1000,500);
        f.setLocation(300,300);
        p1.add(b1);p2.add(b2);p2.add(b2);
        p2.add(b4);p2.add(b5);
        f.add(p1,BorderLayout.NORTH);
        f.add(p2,BorderLayout.SOUTH);
        f.setVisible(true);
    }
}

6 事件处理

事件源:事件的发起者,通常是一个组件

事件的处理:处理方式通常是一个方法,一个特点类的特定成员方法。

一定要实现Actionlistener方法

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Event_v1 {
    public static void main(String[] args) {
        Frame f = new Frame("我在学习GUI");
        Button b1 = new Button("我是第一个按钮");
        Button b2 = new Button("我是第二个按钮");
        f.setSize(1000 , 500);
        f.setLocation(300 , 300);

        Respp r1 = new Respp();
        b1.addActionListener(r1);
        b2.addActionListener(r1);
        
        b1.setSize(70,80);
        b1.setLocation(300,200);

        b2.setSize(70,80);
        b2.setLocation(300,400);

        f.add(b1);
        f.add(b2);
        f.setVisible(true);
    }
}
class Respp implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("aaaaaaaa");
    }
}
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Event_v2 {
    public static void main(String[] args) {
        Frame f = new Frame("我在学习GUI");
        Button b1 = new Button("我是第一个按钮");
        Button b2 = new Button("我是第二个按钮");
        f.setSize(1000 , 500);
        f.setLocation(300 , 300);

        r2 r1 = new r2();
        b1.addActionListener(r1);
        b2.addActionListener(r1);

        b1.setSize(70,80);
        b1.setLocation(300,200);

        b2.setSize(70,80);
        b2.setLocation(300,400);

        f.add(b1);
        f.add(b2);
        f.setVisible(true);
    }
}
class r2 implements ActionListener{
    Button b = new Button();

    @Override
    public void actionPerformed(ActionEvent e) {
        Object o = e.getSource();
        if(o instanceof Button){
            b = (Button)o;
            System.out.println(b.getLabel() + "aaaaa");
        }
    }
}
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Event_v3 {
    public static void main(String[] args) {
        Frame f = new Frame();
        Button b1 = new Button("im b1");
        Button b2 = new Button("im b2");
        TextField tf = new TextField();
        f.setSize(1000 , 500);f.setLocation(300 , 300);
        b1.setSize(100,50);b1.setLocation(300,200);
        b2.setSize(70,80);b2.setLocation(300,400);
        tf.setSize(200 , 50);tf.setLocation(0,400);

        resp2 r2 = new resp2(tf);
        b1.addActionListener(r2);
        b2.addActionListener(r2);
        f.setLayout(null);
        f.add(b1);
        f.add(b2);
        f.add(tf);
        f.setVisible(true);
    }
}
class resp2 implements ActionListener{
    TextField tf;
    Button b;
    public resp2(TextField tf){this.tf = tf;}

    @Override
    public void actionPerformed(ActionEvent e) {
        Object o = e.getSource();
        if(o instanceof Button){
            b = (Button)o;
            tf.setText(b.getLabel()+"被点击");
        }
    }
}
  • 不同类型的event,对应的处理函数所在类实现的接口不同
  • 不同类型的event,在被监听时需要调用不同的函数
    • Button对应的消息处理函数所在的类必须实现ActionListenrt接口,监听函数时addActionListener
    • Frame和Dialog对应的消息处理函数所在的类必须实现WindowListener,监听函数时addWindowListener

7 适配器

事件处理方法所在的类需要实现特定的接口,实现接口要实现全部的方法,然鹅只有某些方法是有用的,其他方法是空方法,可以避免实现一些方法

WindowAdapter是一个类,实现了WindowListener接口

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Event_v4 {
    public static void main(String[] args) {
        Frame f = new Frame("我在学习GUI");
        f.setSize(1000 , 500);f.setLocation(300 , 300);
        resp4 resp = new resp4();
        f.addWindowListener(resp);
        f.setVisible(true);
    }
}
class resp4 extends WindowAdapter{
    @Override
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值