游戏的窗口
(1)Java中表示窗体的类:Jframe
自定义窗体的步骤:
1.写一个类,继承Jframe(目的:让我们写的类也变成窗体,有了窗体的特点和行为);
2.写一个构造方法,确定窗体的特点。
构造器:
设置标题 setTitle(" ") ;
设置大小(尺寸) setSize(宽度,高度) ;
设置位置 setLocation(横坐标,纵坐标);
设置相对位置居中 setLocationRelativeTo(null);
设置不允许改变界面大小setResizable(false);
设置默认关闭的选项setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
主函数:
1.创建窗体;
2.创建游戏面板;
3.将面板加入到窗体中
4.设置显示窗体
frame.setVisible(true);//true 表示显示 false 表示隐藏
(2)游戏面板
游戏界面:Java中常用的面板类(JPanel)。
构造器:
画图专用方法:
代码如下:
Gameframe类:
package test;
import javax.swing.*;
public class Gameframe extends Jframe {
public Gameframe(){
//设置标题
//setTitle
// 调用从Jframe中继承过来的方法
setTitle("标题");
//设置大小(尺寸)
//setSize(宽度,高度) 单位:像素
setSize(512,768);
//设置位置
// setLocation(横坐标,纵坐标)
//设置位置相对居中
setLocationRelativeTo(null);
//设置不允许改变界面大小
setResizable(false);
//设置默认关闭的选项
//关闭窗体的时候结束程序
//做任何游戏,下面代码必须得加
setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
}
public Gameframe(String title){
this();
setTitle(title);
}
public Gameframe(String title,int width,int height){
setTitle(title);
setSize(width,height);
}
public static void main(String[] args) {
//创建窗体
// Gameframe frame = new Gameframe();
//创建指定标题的游戏窗体
Gameframe frame = new Gameframe("澳门皇冠赌场");
//创建游戏面板
GamePanel panel = new GamePanel();
//将面板加入到窗体中
frame.add(panel);
//设置显示窗体
//frame.setVisible() true 表示显示 false 表示隐藏
//此行代码,最好放在 设置好面板之后
frame.setVisible(true);
}
}
GamePanel类:
package test;
import javax.swing.*;
import java.awt.*;
public class GamePanel extends JPanel {
public GamePanel(){
//设置背景
//color 是Java中表示颜色的类
setBackground(Color.black);
}
public void paint(Graphics g) {
super.paint(g);//这行代码不要删,并且放在第一行
//设置画笔的颜色
g.setColor(Color.red);
//设置字体
//new Font("字体",字体样式,字体的大小)
//Font.BOLD 文字加粗 Font.PLAIN(默认普通字体) Font.ITALIC 斜体
//g.setFont(new Font("楷体",Font.BOLD,30))
g.setFont(new Font("楷体",Font.BOLD,30));
//画文字
//g.drawString("文字内容",横坐标x,纵坐标y)
g.drawString("攀哥最帅",100,200);
g.setColor(Color.green);
g.setFont(new Font("楷体",Font.BOLD,50));
g.drawString("不接受反驳",100,400);
//画图形
//画空心矩形
//g.drawRect(x,y,width,height)
g.drawRect(10,20,100,100);
//画实心矩形
//g.fillRect(x,y,width,height)
g.fillRect(150,10,100,100);
//画空心圆
//g.drawOval(x,y,width,height)
g.drawOval(10,150,200,100);
// 画实心圆
// g.fillOval(x,y,width,height)
g.fillOval(150,150,100,100);
//画圆弧
//g.drawArc(横坐标,纵坐标,宽度,高度,起始弧度,终止弧度);
g.drawArc(10,300,100,100,0,-180);
//画扇形
//g.drawLine(起点横坐标,起点纵坐标,终点横坐标,终点纵坐标)
g.drawLine(20,20,500,20);
//画直线
//g.drawLine(起点的横坐标,纵坐标,终点的横坐标,纵坐标)
g.drawLine(20,20,500,500);
//修改线条的粗细
// 1.将画笔转换成2d画笔
Graphics2D g2d = (Graphics2D) g;
// 2.设置线条的粗细
g2d.setStroke(new BasicStroke(10));
// 3.画完之后,一定要把粗细改回初始状态
g2d.setStroke(new BasicStroke(1));
g.drawLine(20,60,500,60);
g.setFont(new Font("楷体",Font.BOLD,100));
//画五角星
g.drawString("★",300,600);
//旋转坐标系
// 1.将画笔转换成2d画笔
// Graphics2D g2d = (Graphics2D) g;
// 2.设置旋转坐标系,设置旋转角度,以及哪个位置为原点旋转
g2d.rotate(0.4);
g.drawString("★",300,600);
// 3.画完之后,记得角度旋转回来
g2d.rotate(-0.4);
}
}
运行结果:
经典案例:
(1)画国旗
①五星红旗
Chinaframe类:
package homework1114;
import day1114.Gameframe;
import day1114.GamePanel;
import javax.swing.*;
import java.awt.*;
public class Chinaframe extends Jframe {
//无参构造方法
public Chinaframe(){
//设置标题 setTitle
setTitle("五星红旗");
//设置大小(尺寸) setSize(宽度,高度) 单位:像素
setSize(1200,800);
//设置位置相对居中
setLocationRelativeTo(null);
//设置不允许改变界面大小
setResizable(false);
//设置默认关闭的选项
setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
}
// 程序入口
public static void main(String[] args) {
//创建窗体
Chinaframe frame = new Chinaframe();
//创建游戏面板
ChinaPanel panel = new ChinaPanel();
//将面板加入到窗体中
frame.add(panel);
//设置显示窗体
frame.setVisible(true);
}
}
JPanel类:
package homework1114;
import javax.swing.*;
import java.awt.*;
public class ChinaPanel extends JPanel {
public ChinaPanel(){
//设置背景
//color 是Java中表示颜色的类
setBackground(Color.red);
}
public void paint(Graphics g) {
super.paint(g);
//画五角星
g.setColor(Color.yellow);
// 大小
g.setFont(new Font("楷体",Font.BOLD,200));
// 大五角星
g.drawString("★",50,240);
g.setFont(new Font("楷体",Font.BOLD,80));
// 1. 将画笔转换城2d画笔
Graphics2D g2d = (Graphics2D)g;
// 2. 旋转坐标系,设置旋转角度,以及哪个位置为原点旋转
g2d.rotate(0.4); // Math.sin() cos()
// 第一个小五角星
g.drawString("★",240,-30);
// 3. 画完之后,记得角度旋转回来
g2d.rotate(-0.4);
// 2. 旋转坐标系,设置旋转角度,以及哪个位置为原点旋转
g2d.rotate(0.8); // Math.sin() cos()
// 第二个小五角星
g.drawString("★",305,-150);
// 3. 画完之后,记得角度旋转回来
g2d.rotate(-0.8);
// 第三个小五角星
g.drawString("★",320,260);
// 2. 旋转坐标系,设置旋转角度,以及哪个位置为原点旋转
g2d.rotate(0.4); // Math.sin() cos()
// 第四个小五角星
g.drawString("★",350,200);
// 3. 画完之后,记得角度旋转回来
g2d.rotate(-0.4);
}
}
运行结果:
②美国国旗
USframe类:
package homework11141;
import homework1114.Chinaframe;
import homework1114.ChinaPanel;
import javax.swing.*;
public class USframe extends Jframe {
//无参构造方法
public USframe(){
//设置标题 setTitle
setTitle("美国国旗");
//设置大小(尺寸) setSize(宽度,高度) 单位:像素
setSize(1900,1014);
//设置位置相对居中
setLocationRelativeTo(null);
//设置不允许改变界面大小
setResizable(false);
//设置默认关闭的选项
setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
}
// 程序入口
public static void main(String[] args) {
//创建窗体
USframe frame = new USframe();
//创建游戏面板
USFPanel panel = new USFPanel();
//将面板加入到窗体中
frame.add(panel);
//设置显示窗体
frame.setVisible(true);
}
}
USFPanel类:
package homework11141;
import javax.swing.*;
import java.awt.*;
public class USFPanel extends JPanel {
public USFPanel(){
//设置背景
//color 是Java中表示颜色的类
setBackground(Color.white);
}
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.red);
//修改线条的粗细
// 1.将画笔转换成2d画笔
Graphics2D g2d = (Graphics2D) g;
// 2.设置线条的粗细
g2d.setStroke(new BasicStroke(78));
//画直线
//g.drawLine(起点的横坐标,纵坐标,终点的横坐标,纵坐标)
g.drawLine(0,39,1900,39);
g.drawLine(0,193,1900,193);
g.drawLine(0,347,1900,347);
g.drawLine(0,501,1900,501);
g.drawLine(0,655,1900,655);
g.drawLine(0,809,1900,809);
g.drawLine(0,963,1900,963);
// 3.画完之后,一定要把粗细改回初始状态
g2d.setStroke(new BasicStroke(1));
g.setColor(Color.blue);
// 2.设置线条的粗细
g2d.setStroke(new BasicStroke(546));
//画直线
//g.drawLine(起点的横坐标,纵坐标,终点的横坐标,纵坐标)
g.drawLine(0,268,732,268);
// 3.画完之后,一定要把粗细改回初始状态
g2d.setStroke(new BasicStroke(1));
//画五角星
g.setColor(Color.white);
// 大小
g.setFont(new Font("楷体",Font.BOLD,60));
// 五角星
for(int i=0 ; i<5 ; i++){// 行数
// 列数
for(int j=0 ; j<6 ; j++){
g.drawString("★",25+175*j,60+110*i);
}
}
for(int i=0 ; i<4 ; i++){// 行数
// 列数
for(int j =0 ; j<5 ; j++){
g.drawString("★",110+175*j,110+110*i);
}
}
}
}
运行结果:
③哆啦A梦
Blueframe类:
package homework11142;
import homework11141.USFPanel;
import homework11141.USframe;
import javax.swing.*;
public class Blueframe extends Jframe {
//无参构造方法
public Blueframe(){
//设置标题 setTitle
setTitle("哆啦A梦");
//设置大小(尺寸) setSize(宽度,高度) 单位:像素
setSize(1000,1000);
//设置位置相对居中
setLocationRelativeTo(null);
//设置不允许改变界面大小
setResizable(false);
//设置默认关闭的选项
setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
}
// 程序入口
public static void main(String[] args) {
//创建窗体
Blueframe frame = new Blueframe();
//创建游戏面板
BluePanel panel = new BluePanel();
//将面板加入到窗体中
frame.add(panel);
//设置显示窗体
frame.setVisible(true);
}
}
BluePanel类:
package homework11142;
import org.w3c.dom.css.RGBColor;
import javax.swing.*;
import java.awt.*;
public class BluePanel extends JPanel {
public BluePanel(){
//设置背景
//color 是Java中表示颜色的类
setBackground(new Color(29,140,219));
}
public void paint(Graphics g) {
super.paint(g);
//修改线条的粗细
// 1.将画笔转换成2d画笔
Graphics2D g2d = (Graphics2D) g;
// 2.设置线条的粗细
//轮廓
g2d.setStroke(new BasicStroke(10));
g.fillOval(200,50,610,610);
g.setColor(new Color(0,43,127));
g.fillOval(215,60,580,590);
g.setColor(Color.black);
g.fillOval(255,165,500,500);
g.setColor(Color.white);
g.fillOval(270,180,470,480);
//画空心圆
//g.drawOval(x,y,width,height)
//眼睛rgb:0,43,127
g.setColor(Color.black);
g.drawOval(395,100,100,200);
g.setColor(Color.white);
g.fillOval(400,105,90,190);
g.setColor(Color.black);
g.drawOval(505,100,100,200);
g.setColor(Color.white);
g.fillOval(510,105,90,190);
g.setColor(Color.black);
g2d.setStroke(new BasicStroke(20));
g.drawOval(435,180,40,60);
g.drawOval(530,180,40,60);
//鼻子
g2d.setStroke(new BasicStroke(10));
g.fillOval(460,290,100,60);
g.setColor(Color.red);
g.fillOval(470,300,80,40);
g.setColor(Color.black);
g.drawLine(510,350,510,550);
//胡须
g.drawLine(300,365,450,400);
g.drawLine(300,430,440,440);
g.drawLine(330,510,440,460);
g.drawLine(550,380,680,320);
g.drawLine(540,440,700,440);
g.drawLine(540,480,690,520);
//画圆弧
//g.drawArc(横坐标,纵坐标,宽度,高度,起始弧度,终止弧度);
g.drawArc(350,400,300,150,0,-180);
// 3.画完之后,一定要把粗细改回初始状态
g2d.setStroke(new BasicStroke(1));
// 2.设置线条的粗细
g2d.setStroke(new BasicStroke(10));
//画直线
//g.drawLine(起点的横坐标,纵坐标,终点的横坐标,纵坐标)
g.setColor(Color.black);
g.drawLine(320,600,680,600);
g.setColor(Color.red);
g2d.setStroke(new BasicStroke(60));
g.drawLine(345,635,655,635);
g.setColor(Color.black);
g2d.setStroke(new BasicStroke(10));
g.drawLine(320,600,320,670);
g.drawLine(680,600,680,670);
g.drawLine(320,670,680,670);
g.fillOval(450,670,100,100);
g.setColor(Color.yellow);
g.fillOval(460,680,80,80);
g.setColor(Color.black);
g.drawLine(455,720,545,720);
g.drawLine(500,720,500,760);
// 3.画完之后,一定要把粗细改回初始状态
g2d.setStroke(new BasicStroke(1));
}
}
运行结果:



