java图形界面Swing

在我们设计程序的时候,可以让我们的类继承自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);
}

}

此处我们用面向对象来进行实现,对象的方式就很容易扩展功能!

猜你喜欢

转载自blog.csdn.net/sky274548769/article/details/80613327