JAVA视频学习笔记-马士兵(十一)

JAVA视频学习笔记(十一)

GUI_初步(20200727)

  1. GUI(Graphics User Interface 图形用户界面)编程:
      图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。
  2. AWT  
    在这里插入图片描述Component(组件)和Container(容器)
    在这里插入图片描述Window中的子类Frame:
    在这里插入图片描述
/*	范例名称:Frame 应用举例
 * 	源文件名称:TestFrame.java
 *	要  点:Frame组件的创建及显示设置
 */

import java.awt.*;
public class TestFrame {
	public static void main( String args[]) {
		Frame f = new Frame("My First Test");
		f.setLocation(300, 300);
		f.setSize( 170,100);
		f.setBackground( Color.blue);
		f.setResizable(false);
		f.setVisible( true);
	}
}

实际应用:

import java.awt.*;

public class TestMultiFrame {
    public static void main(String args[]) {
        MyFrame f1 = 
            new MyFrame(100,100,200,200,Color.BLUE);
        MyFrame f2 = 
            new MyFrame(300,100,200,200,Color.YELLOW);
        MyFrame f3 = 
            new MyFrame(100,300,200,200,Color.GREEN);
        MyFrame f4 = 
            new MyFrame(300,300,200,200,Color.MAGENTA);
    }
}




class MyFrame extends Frame{
    static int id = 0;
    MyFrame(int x,int y,int w,int h,Color color){
        super("MyFrame " + (++id));
        setBackground(color);
        setLayout(null);
        setBounds(x,y,w,h);
        setVisible(true);
    }
}

在这里插入图片描述

import java.awt.*;

public class TestPanel {
     public static void main(String args[]) {
     		 Frame f = 
             new Frame("Java Frame with Panel");
         Panel p = new Panel(null);
         f.setLayout(null);
         f.setBounds(300,300,500,500);
         f.setBackground(new Color(0,0,102));
         p.setBounds(50,50,400,400);
         p.setBackground(new Color(204,204,255));
         f.add(p);
         f.setVisible(true);
    }
}

实际应用:

import java.awt.*;

public class TestMultiPanel {
    public static void main(String args[]) {
        new MyFrame2("MyFrameWithPanel",300,300,400,300);
    }
}


class MyFrame2 extends Frame{
    private Panel p1,p2,p3,p4;
    MyFrame2(String s,int x,int y,int w,int h){
        super(s);
        setLayout(null);
        p1 = new Panel(null); p2 = new Panel(null);
        p3 = new Panel(null); p4 = new Panel(null);
        p1.setBounds(0,0,w/2,h/2);
        p2.setBounds(0,h/2,w/2,h/2);
        p3.setBounds(w/2,0,w/2,h/2);
        p4.setBounds(w/2,h/2,w/2,h/2);
        p1.setBackground(Color.BLUE);
        p2.setBackground(Color.GREEN);
        p3.setBackground(Color.YELLOW);
        p4.setBackground(Color.MAGENTA);
        add(p1);add(p2);add(p3);add(p4);
        setBounds(x,y,w,h);
        setVisible(true);
    }
}

设计一个含有Panel的自定义的Frame类,形式如下图:
在这里插入图片描述具体代码:

import java.awt.*;

public class CenterPanel {
  public static void main(String args[]) {
    new MyFrame3(300,300,400,300,Color.BLUE);
  }
}

class MyFrame3 extends Frame{
  private Panel p;
  MyFrame3(int x,int y,int w,int h,Color c){
    super("FrameWithPanel");
    setLayout(null);
    setBounds(x,y,w,h);
    setBackground(c);
    p = new Panel(null); 
    p.setBounds(w/4,h/4,w/2,h/2);
    p.setBackground(Color.YELLOW);
    add(p);
    setVisible(true);
  }
}

GUI_布局管理器(20200728)

  1. 布局管理器 
    在这里插入图片描述默认的布局管理器:
    在这里插入图片描述在这里插入图片描述用法举例:
/*	范例名称:FlowLayout 用法举例
 * 	源文件名称:TestFlowLayout.java
 *	要  点:
 *		1. 布局管理器的概念和作用
 *   	2. FlowLayout的性质及用法
 */

import java.awt.*;

public class TestFlowLayout {
    public static void main(String args[]) {
	 			Frame f = new Frame("Flow Layout");
        Button button1 = new Button("Ok");
        Button button2 = new Button("Open");
        Button button3 = new Button("Close");
        f.setLayout(new FlowLayout(FlowLayout.LEFT));
        f.add(button1);
        f.add(button2);
        f.add(button3);
        f.setSize(100,100);
        f.setVisible(true);
    }
}

GUI_事件模型(20200729)

  1. 事件监听:
      先看程序:
/*	范例名称:Java事件处理举例
 * 	源文件名称:TestActionEvent.java
 *	要  点:
 *  	1. Java事件处理机制
 *		2. 事件源、事件监听器概念及作用
 *		3. 如何在一个现有组件上注册监听器
 */

import java.awt.*;
import java.awt.event.*;

public class TestActionEvent {
    public static void main(String args[]) {
			Frame f = new Frame("Test");
			Button b = new Button("Press Me!");
			Monitor bh = new Monitor();
			b.addActionListener(bh);
			f.add(b,BorderLayout.CENTER);
			f.pack();
			f.setVisible(true);
    }
}

class Monitor implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        System.out.println("a button has been pressed");    
    }
}

在这里插入图片描述

GUI_持有对方引用(20200730)

  1. 持有对方引用:
      做一个做加法的图形界面:
      不用持有对方引用的写法:
import java.awt.*;
import java.awt.event.*;

public class TFMath {
    public static void main(String[] args) {
        new TFFrame().launchFrame();
    }
}

class TFFrame extends Frame {
    TextField num1,num2,num3;
    
    public void launchFrame() {
        num1 = new TextField(10);//宽度为10的文本框
        num2 = new TextField(10);
        num3 = new TextField(15);
        Label labPlus = new Label("+");//加号这其实就是个静态文本,这个类就是个静态的文本
        Button butEqual = new Button("=");
        butEqual.addActionListener(new MyMonitor(num1,num2,num3));
        setLayout(new FlowLayout());
        add(num1);
        add(labPlus);
        add(num2);
        add(butEqual);
        add(num3);
        pack();
        setVisible(true);
    }
}

class MyMonitor implements ActionListener {
    TextField num1,num2,num3;

    public MyMonitor(TextField num1,TextField num2,TextField num3) {//创造一个构造方法来获得三个文本框的信息(引用)
        this.num1 = num1;
        this.num2 = num2;
        this.num3 = num3;
    }

    public void actionPerformed(ActionEvent e) {
        int n1 = Integer.parseInt(num1.getText());
        int n2 = Integer.parseInt(num2.getText());
        num3.setText(""+ (n1+n2));
    }
}

持有引用类的:

import java.awt.*;
import java.awt.event.*;

public class TFMath {
    public static void main(String[] args) {
        new TFFrame().launchFrame();
    }
}

class TFFrame extends Frame {
    TextField num1,num2,num3;
    
    public void launchFrame() {
        num1 = new TextField(10);//宽度为10的文本框
        num2 = new TextField(10);
        num3 = new TextField(15);
        Label labPlus = new Label("+");//加号这其实就是个静态文本,这个类就是个静态的文本
        Button butEqual = new Button("=");
        butEqual.addActionListener(new MyMonitor(this));//把自己这个对象交给监视器
        setLayout(new FlowLayout());
        add(num1);
        add(labPlus);
        add(num2);
        add(butEqual);
        add(num3);
        pack();
        setVisible(true);
    }
}

class MyMonitor implements ActionListener {
    TFFrame tff = null;//直接持有框架这个类的引用

    public MyMonitor(TFFrame tff) {
        this.tff = tff;
    }

    public void actionPerformed(ActionEvent e) {
        int n1 = Integer.parseInt(tff.num1.getText());
        int n2 = Integer.parseInt(tff.num2.getText());
        tff.num3.setText(""+ (n1+n2));
    }
}

更简洁的方法:

import java.awt.*;
import java.awt.event.*;

public class TFMath2 {
    public static void main(String[] args) {
        new TFFrame().launchFrame();
    }
}

class TFFrame extends Frame {
    TextField num1,num2,num3;
    
    public void launchFrame() {
        num1 = new TextField(10);//宽度为10的文本框
        num2 = new TextField(10);
        num3 = new TextField(15);
        Label labPlus = new Label("+");//加号这其实就是个静态文本,这个类就是个静态的文本
        Button butEqual = new Button("=");
        butEqual.addActionListener(new MyMonitor());
        setLayout(new FlowLayout());
        add(num1);
        add(labPlus);
        add(num2);
        add(butEqual);
        add(num3);
        pack();
        setVisible(true);
    }
    
    private class MyMonitor implements ActionListener { //内部类
        public void actionPerformed(ActionEvent e) {
            int n1 = Integer.parseInt(num1.getText());//可以方便地访问TFFrame的成员变量
            int n2 = Integer.parseInt(num2.getText());
            num3.setText(""+ (n1+n2));
        }

    }
    

}

GUI_内部类(20200731)

  1. 内部类:
    在这里插入图片描述

GUI_Paint方法(20200801)

  1. Paint方法:
      Component 类提供了两个和绘图相关的方法:
      a. paint(Graphics g); 绘制组件的外观
      b. repaint(); 刷新组件的外观。
      当组件第一次在屏幕显示的时候,程序会自动调用paint来绘制组件。

GUI_Adapter_and_repaint(20200802)

  1. Adapter_and_repaint:
// MyMouseAdapter.java
 
 
import java.awt.*;
import java.awt.event.*;
import java.util.*;
 
public class MyMouseAdapter {
	public static void main(String args[]) {
		new JinFrame("drawing....");
	}
}
 
class JinFrame extends Frame {
	ArrayList points = null;
	JinFrame(String s) {
		super(s);
		points = new ArrayList();
		setLayout(null);
		setBounds(300, 300, 400, 300);
		this.setBackground(new Color(204, 204, 255));
		setVisible(true);
		this.addMouseListener(new Monitor());
	}
 
	public void paint(Graphics g) {
		Iterator i = points.iterator();
		while(i.hasNext()) {
			Point p = (Point) i.next();
			g.setColor(Color.BLUE);
			g.fillOval(p.x, p.y, 10, 10);
		}
	}
 
	public void addPoint(Point p) {
		points.add(p);
	}
}
 
class Monitor extends MouseAdapter {
	public void mousePressed(MouseEvent e) {
		JinFrame f = (JinFrame) e.getSource();
		f.addPoint(new Point(e.getX(), e.getY()));
		f.repaint();
	}
}

GUI_KeyEvent(20200803)

  1. Window事件:
    在这里插入图片描述
  2. KeyEvent:
import java.awt.*;
import java.awt.event.*;

public class TestKey {
	public static void main(String[] args) {
		new KeyFrame().launchFrame();
	}
}

class KeyFrame extends Frame {
	public void launchFrame() {
		setSize(200, 200);
		setLocation(300,300);
		addKeyListener(new MyKeyMonitor());
		setVisible(true);
	}
	
	class MyKeyMonitor extends KeyAdapter {
		public void keyPressed(KeyEvent e) {
			int keyCode = e.getKeyCode();
			if(keyCode == KeyEvent.VK_UP) {
				System.out.println("UP");
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值