Java-GUI编程

1.简介

GUL的核心技术:Swing AWT

可以写出自己心中想要的一些小工具

工作时候,也可以需要维护到swing界面,概率极小

了解MVC架构,了解监听

缺点:界面不美观

需要jre环境

2.AWT

2.1AWT介绍

包含了很多类和接口 GUL:图形用户编程

元素:窗口、按钮、文本框

2.2组件和容器

2.2.1Frame

package CSDN;

import java.awt.*;

// GUI第一个界面
public class GUITest1 {
    public static void main(String[] args) {
        //Frame.JDK //看不到,在内存中
        Frame frame = new Frame("我的第一个Java图像界面窗口");

        //设置可见性
        frame.setVisible(true);

        //设置窗口大小
        frame.setSize(400,400);

        //设置背景颜色
        frame.setBackground(new Color(0x222253));

        //弹出的初始化位置
        frame.setLocation(200,200);
        
        //设置大小固定
        frame.setResizable(false);
    }
}

运行结果:

2.2.2 面板:

package CSDN;

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

// Panel 可以看成是一个空间,但是不能单独存在
public class TestPanel {
    public static void main(String[] args) {
        Frame frame = new Frame();
        //布局概念
        Panel panel = new Panel();
        //设置布局
        frame.setLayout(null);

        //坐标
        frame.setBounds(300,300,500,500);
        frame.setBackground(new Color(0x393984));
        //panel设置坐标,相对于frame
        panel.setBounds(50,50,400,400);
        panel.setBackground(new Color(0xA7A7D5));

        //frame.add
        frame.add(panel);
        //可见性
        frame.setVisible(true);
        //监听事件,监听窗口关闭事件system.exit()
        //适配器模式
        frame.addWindowListener(new WindowAdapter() {
            //窗口点击关闭的时候需要做的事情
            @Override
            public void windowClosing(WindowEvent e) {
                //结束程序
                System.exit(0);
            }
        });
    }
}

运行结果:

按钮:

左右

package CSDN;

import java.awt.*;

public class TestFrame {
    public static void main(String[] args) {
        //展示多个窗口 new
        MyFrame myFrame1 = new MyFrame(100,100,200,200,Color.blue);
        MyFrame myFrame2 = new MyFrame(300,100,200,200,Color.yellow);
        MyFrame myFrame3 = new MyFrame(100,300,200,200,Color.black);
        MyFrame myFrame4 = new MyFrame(300,300,200,200,Color.magenta);

    }
}
class MyFrame extends Frame{
    static int id = 0;//可能存在多个窗口,我们需要一个计数器

    public MyFrame(int x,int y,int w, int h,Color color){
    super("Myframe+"+(++id));
    setVisible(true);
    setBounds(x,y,w,h);
    setBackground(color);
    }
}

 东西南北:

package CSDN;

import java.awt.*;

public class TestBorderLayout {
    public static void main(String[] args) {
        Frame frame = new Frame();


        Button east = new Button("East");
        Button west = new Button("West");
        Button south = new Button("South");
        Button north = new Button("North");
        Button center = new Button("Center");

        frame.add(east,BorderLayout.EAST);
        frame.add(west,BorderLayout.WEST);
        frame.add(south,BorderLayout.SOUTH);
        frame.add(north,BorderLayout.NORTH);
        frame.add(center,BorderLayout.CENTER);

        frame.setBounds(200,200,200,200);
        frame.setVisible(true);

    }
}

运行结果

 表格布局;

package CSDN;

import java.awt.*;

public class TestGridLayout {
    public static void main(String[] args) {
        Frame frame = new Frame();

        Button a = new Button("1");
        Button b = new Button("2");
        Button c = new Button("3");
        Button d = new Button("4");
        Button e = new Button("5");
        Button f = new Button("6");
        frame.setLayout(new GridLayout(3,2));

        frame.add(a);
        frame.add(b);
        frame.add(c);
        frame.add(d);
        frame.add(e);
        frame.add(f);

        frame.pack();//Java函数,自动调整大小
        frame.setVisible(true);
    }
}

运行结果;

事件监听:

当某个事件发生时候,干什么?

package CSDN.Monitor;

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 TestActionEvent {
    public static void main(String[] args) {
        //按下按钮,触发一些事件
        Frame frame = new Frame();
        Button button = new Button();

        //因为addActionListener()需要一个addActionListener,所以我们需要构造一个addActionListener
        MyActionListener myActionListener = new MyActionListener();
        button.addActionListener(myActionListener);

        frame.add(button, BorderLayout.CENTER);
        frame.pack();
        windowClose(frame);//关闭窗口
        frame.setVisible(true);
    }

    //关闭窗口的事件
    public static void windowClose(Frame frame) {
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

//事件监听
class MyActionListener implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("aaa");
    }
}

多个按钮,共享一个事件

package CSDN.Monitor;

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

public abstract class TestActionEvent2 {
    public static void main(String[] args) {
        //俩个按键,实现同一个监听
        //开始 停止
        Frame frame = new Frame();
        Button start = new Button("start");
        Button stop = new Button("stop");

        //可以显示定义触发会返回的命令,如果不显示定义,则会走默认的值
        //可以多个按钮只写一个监听类
        stop.setActionCommand("stop");
        MyMonitor myMonitor = new MyMonitor();
        start.addActionListener(myMonitor);
        stop.addActionListener(myMonitor);
        frame.add(start, BorderLayout.NORTH);
        frame.add(stop, BorderLayout.SOUTH);
        frame.pack();
        frame.setVisible(true);
        windowClose(frame);
    }


    //关闭窗口的事件
    public static void windowClose(Frame frame) {
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

class MyMonitor implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        //
        System.out.println("按钮被点击:msg" + e.getActionCommand());

    }
}

 输入框TextField监听

package CSDN.Monitor;

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

public class Texttest {
    public static void main(String[] args) {
        //启动
        new MyFrame();
    }
}

class MyFrame extends Frame {
    public MyFrame() {
        TextField textField = new TextField();
        add(textField);

        //监听这个文本框输入的文字
        MyactionListener1 myActionListener1 = new MyactionListener1();
        //按下回车,就会触发这个输入框事件
        textField.addActionListener(myActionListener1);

        //设置替换编码
        textField.setEchoChar('*');
        setVisible(true);
        pack();
    }
}

class MyactionListener1 implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        TextField field = (TextField) e.getSource();//获取一些资源,返回对象
        System.out.println(field.getText());
        field.setText("");//null
    }
}

简易计算器:

package CSDN.Monitor;

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

//简易计算器
public class TestCalc {
    public static void main(String[] args) {
        new Calculator().loafFrame();
    }
}

//计算器类
class Calculator extends Frame {
    //属性
    TextField num1, num2, num3;
    //方法
    public void loafFrame() {


        //3个文本框
        TextField num1 = new TextField(10);
        TextField num2 = new TextField(10);
        TextField num3 = new TextField(20);
        //1个按钮
        Button button = new Button("=");
        button.addActionListener(new MycalculatorListener(this));
        //1个标签
        Label label = new Label("+");

        //布局
        setLayout(new FlowLayout());
        add(num1);
        add(label);
        add(num2);
        add(button);
        add(num3);
        pack();
        setVisible(true);
    }
}

//监听器类
class MycalculatorListener implements ActionListener {
    //获取计算器对象,在一个类组合另一个类
    Calculator calculator = null;

    private TextField num1, num2, num3;

    public MycalculatorListener(Calculator calculator) {
        this.calculator = calculator;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //获得加数与被加数
        // 将这个值+法运算后,放到第三个框
        // 消除前两个框
        int n1 = Integer.parseInt(calculator.num1.getText());
        int n2 = Integer.parseInt(calculator.num2.getText());
        calculator.num3.setText(""+(n1+n2));
        calculator.num1.setText("");
        calculator.num2.setText("");
    }
}

画笔:

package CSDN.Paint;

import java.awt.*;

public class TestPaint
{
    public static void main(String[] args) {
        new MyPaint().loadFrame();
    }
}

class MyPaint extends Frame {

    public void loadFrame(){
        setBounds(200,200,600,600);
        setVisible(true);
    }

    //画笔
    @Override
    public void paint(Graphics g) {
        //画笔,需要有颜色,画笔可以画画
        g.setColor(Color.red);
        g.drawOval(100,100,100,100);//⚪
        g.fillOval(200,200,100,100);//实心⚪

        g.setColor(Color.BLUE);
        g.fillRect(300,400,100,200);//矩形
        
        //养成习惯,画笔用完,将他还原最初的颜色(黑色)
    }
}

运行结果:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值