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:充当内容面板,进行图形绘制