【算法可视化】第一章 Java GUI编程基础

1.1 使用JFrame

import javax.swing.*;
import java.awt.*;

public class Main {

    public static void main(String[] args) {

        EventQueue.invokeLater(() -> {
            JFrame frame = new JFrame("Welcome");//窗口标题
            frame.setSize(500, 500);窗口宽和高
            frame.setResizable(false);是否允许用户改变窗口大小,这里false是不允许
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 当点击窗口的关闭符号能使整个JFrame框架都正确关闭
            frame.setVisible(true);// 创建窗口
        });
    }
}

1.2 创建JFrame子类

import java.awt.*;
import javax.swing.*;

public class AlgoFrame extends JFrame{

    private int canvasWidth;// 可绘制图形区域的宽
    private int canvasHeight;// 可绘制图形区域的高

    public AlgoFrame(String title, int canvasWidth, int canvasHeight){

        super(title);// 调用父类构造方法,即传入标题

        this.canvasWidth = canvasWidth;
        this.canvasHeight = canvasHeight;

        setSize(canvasWidth, canvasHeight);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 当点击窗口的关闭符号能使整个JFrame框架都正确关闭
        setResizable(false);// 是否允许用户改变窗口大小,这里false是不允许

        setVisible(true);// 创建窗口
    }
    //构造方法
    public AlgoFrame(String title){

        this(title, 1024, 768);
    }

    public int getCanvasWidth(){return canvasWidth;}
    public int getCanvasHeight(){return canvasHeight;}
}

 

1.3 设置画布与图形绘制基础

import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class AlgoFrame extends JFrame {
	private int canvasWidth;// 可绘制图形区域的宽
	private int canvasHeight;// 可绘制图形区域的高
	/*
	 * 定义构造函数
	 */

	public AlgoFrame(String title, int canvasWidth, int canvasHeight) {
		super(title);// 调用父类构造方法,即传入标题
		this.canvasWidth = canvasWidth;
		this.canvasHeight = canvasHeight;
		AlgoCanvas canvas = new AlgoCanvas();// 创建内容面板对象
		setContentPane(canvas);// 设置内容面板
		pack();// 自动根据内容面板大小,调整窗口大小
		setResizable(false);// 是否允许用户改变窗口大小,这里false是不允许
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 当点击窗口的关闭符号能使整个JFrame框架都正确关闭
		setVisible(true);// 创建窗口
	}

	public int getCanvasWidth() {
		return canvasWidth;
	}

	public int getCanvasHeight() {
		return canvasHeight;
	}

	/*
	 * 定义内容面板类,作为内部类供AlgoFrame使用
	 */
	private class AlgoCanvas extends JPanel {
		@Override
		public void paintComponent(Graphics g) {// 绘制组件
			super.paintComponent(g);
			/*
			 * 绘制一个圆 在屏幕坐标系中位置(50,50),注意与数学坐标系相区分 宽400 长400
			 */
			g.drawOval(50, 50, 400, 400);
		}

		@Override
		public Dimension getPreferredSize() {// 返回画布大小
			return new Dimension(canvasWidth, canvasHeight);
		}
	}
}

JFrame(框架):MenuBar(菜单栏)+Content Pane(内容窗口,是一个容器)

Content Pane:可以添加组件,如按钮列表等等,但本课程不使用

JPanel:充当内容面板,进行图形绘制

1.4 使用Graphics2D

1.5 整理绘制工具类

1.6 高级绘制特性:抗锯齿和双缓存

1.7 动画基础

1.8 算法可视化中的MVC

1.9 键盘事件

1.10 鼠标事件

1.11 课程所用的GUI编程模板

猜你喜欢

转载自blog.csdn.net/qq_42370146/article/details/83013846