在我们设计程序的时候,可以让我们的类继承自java的类,这样我们就可以编写自己的窗体,
package com.xingxue.qq2;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class Zhanchang extends JFrame{
public Zhanchang() {
this.setSize(800, 400);
this.setLocation(150, 100);
ImageIcon icon = new ImageIcon("img/1.png");
Image image = icon.getImage();
this.setIconImage(image);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
对于我们Swing来说,JFrame实际上是一个窗体,而里面还存在一个专门存放组件的容器对象JPanel,由于java默认的JPanel是一个空白的界面,我们可以理解为JFrame为画板,JPanel为画纸, 我们一般都是重写画纸,实现自己想要的效果
package com.xingxue.qq2;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class Jiemian extends JPanel{
//alt + /
//Graphics g ==
//绘制画纸
protected void paintComponent(Graphics g) {
// g.drawLine(0, 0, 100, 100);
// g.drawRect(100, 100, 50, 50);
//
//
// g.setColor(Color.red);
//
// g.drawRect(200, 200, 50, 50);
// g.draw3DRect(300, 300, 50, 50, true);
//画园
g.drawOval(100, 0, 50, 50);
//画矩形
g.drawRect(95, 50, 60, 90);
//画左手
g.drawLine(95, 50, 50, 100);
//画右手
g.drawLine(155, 50, 200, 100);
//左脚
g.drawLine(115, 140, 115, 200);
//右脚
g.drawLine(135, 140, 135, 200);
}
}
注意需要重写的方法,paintCompoment方法,同时参数g是表示画笔,提供了很多方法去实现我们的效果
例如画图片上去
package com.xingxue.qq2;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class BeiJing extends JPanel{
protected void paintComponent(Graphics g) {
//Icon
ImageIcon icon = new ImageIcon("img/timg.jpg");
//Image
Image img = icon.getImage();
g.drawImage(img, 0, 0,780,350, this);
}
}
但是此种方式会很难进行功能扩展,所以我们利用面向对象的方式进行设计架构我们的项目,抽象窗体类、战场类、地图类、飞机类,然后设计方法来进行组装
package com.xingxue.view;
import javax.swing.JFrame;
/**
* 主界面
* @author Administrator
*
*/
public class MainFrame extends JFrame {
GameManager gm = new GameManager();
public MainFrame() {
this.setSize(800, 530);
this.setLocation(300, 100);
this.add(gm);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
package com.xingxue.view;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
/**
* 战场
* @author Administrator
*
*/
public class GameManager extends JPanel{
//加载飞机
Plane me = new Plane();
//加载地图
Map map = new Map();
//加载敌机
protected void paintComponent(Graphics g) {
map.drawMe(g,this);
me.drawMe(g, this);
}
}
package com.xingxue.view;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class Map{
public int x;
public int y;
public int width = 0;
public int height = 0;
public void drawMe(Graphics g, JPanel jp) {
//Icon
ImageIcon icon = new ImageIcon("img/Ground.jpg");
//Image
Image img = icon.getImage();
g.drawImage(img, x, y, jp);
}
}
package com.xingxue.view;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class Plane {
public int x;
public int y=249;
public int width = 90;
public int height = 50;
public void drawMe(Graphics g, JPanel jp) {
//Icon
ImageIcon icon = new ImageIcon("img/myPlane9.gif");
//Image
Image img = icon.getImage();
g.drawImage(img, x, y, jp);
}
}
此处我们用面向对象来进行实现,对象的方式就很容易扩展功能!