首页 > 代码库 > java - 图形程序设计

java - 图形程序设计

 

一、创建框架

框架(frame),没有包含其他窗口的窗口

swing 基于 awt, 创建框架第一步,需要导入swing 与 awt 的包

 

import java.awt.*;import javax.swing.*;     //swing 在java的扩展包中/** * 文件名:SimpleFrameTest.java
* 功能:了解框架搭建部署
* 步骤:
* 1. 定义子类SimpleFrame,构造器中大小设置为300 * 200 象素
* 2. 在SimpleFrameTest中的main方法中创建一个SimpleFrame对象frame
* 3. 定义用户关闭这个框架时的响应动作,默认是隐藏,不是关闭
* 4. 显示框架,默认不显示
*/public class SimpleFrameTest{ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { SimpleFrame frame = new SimpleFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); }}class SimpleFrame extends JFrame{ private static final int DEFAULT_WIDTH = 300; private static final int DEFAULT_HEIGHT = 200; public SimpleFrame() { setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); }}

 

 

 

二、框架大小

import java.awt.*;import javax.swing.*;/** *  文件名: SizedFrameTest.java *  功能:增加框架属性,添加标题
*
*
*/public class SizedFrameTest{ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { JFrame frame = new SizedFrame(); frame.setTitle("SizedFrame");    //设置框架标题名称 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); }}class SizedFrame extends JFrame{ public SizedFrame() {
    //得到框架大小
    //步骤:
    // 1. 调用Toolkit类的静态方法getDefaultTookit得到一个Tookit对象
    // 2. 这个方法以Dimension方式返回屏幕尺寸
    // 3. Dimension 同时用公有变量width 与 hight 保存屏幕宽度与高度
Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screenSize = kit.getScreenSize(); int screenHeight = screenSize.height; int screenWidth = screenSize.width; // 使用框架属性中设置大小将屏幕设置为一半
    // 让系统定位框架 setSize(screenWidth / 2, screenHeight / 2); setLocationByPlatform(true); // 设置框架图标    Image img = new ImageIcon("icon.gif").getImage(); setIconImage(img); }}

 

 

 

三、在组件中显示信息

import javax.swing.*;import java.awt.*;/** * 文件名:NotHelloWorld * 功能:在组件中显示信息 * 步骤: *   1.  */public class NotHelloWorld{   public static void main(String[] args)   {      EventQueue.invokeLater(new Runnable()         {            public void run()            {               JFrame frame = new NotHelloWorldFrame();               frame.setTitle("NotHelloWorld");               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);               frame.setVisible(true);            }         });   }}/** *  构造函数中创建一个新的面板,且加入到框架中 */class NotHelloWorldFrame extends JFrame{   public NotHelloWorldFrame()   {      add(new NotHelloWorldComponent());      pack();   }}/** *  Graphics 画笔继承自JCompoent, 也可继承自JPanel */class NotHelloWorldComponent extends JComponent{   public static final int MESSAGE_X = 75;   public static final int MESSAGE_Y = 100;   private static final int DEFAULT_WIDTH = 300;   private static final int DEFAULT_HEIGHT = 200;   public void paintComponent(Graphics g)   {      g.drawString("Not a Hello, World program", MESSAGE_X, MESSAGE_Y);   }      public Dimension getPreferredSize()     {         return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT);     }}    

 

 

 

四、使用画笔画一个坦克

import javax.swing.*;import java.awt.*;/** *  功能: 画出坦克 *  步骤 *    1. 创建坦克类Tank *    2. 创建我的坦克类Hero 继承 Tank *    3. 创建我的面板MyPanel 继承 JPanel *    4. 在TankGame1类中增加MyPanel *     */public class TankGame1 extends JFrame{        //创建一个面板对象mp    MyPanel mp = null;                public static void main(String[] args)    {        TankGame1 mtg = new TankGame1();        }        //构造函数    public TankGame1()    {        mp = new MyPanel();        this.add(mp);                //增加进面板中        this.setSize(400, 300);  // 大小            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        this.setVisible(true);     //显示    }    }//我的面板class MyPanel extends JPanel{    //定义一个我的坦克    Hero hero = null;        //构造函数    public MyPanel()    {        hero = new Hero(100,100);    }        //重新paint    public void paint(Graphics g)    {        super.paint(g);                //定下活动区域        g.fillRect(0, 0, 400, 300);                        //调用函数drawTank画出我的坦克        this.drawTank(hero.getX(), hero.getY(), g, 0, 1);            }        //画出坦克的函数    public void drawTank(int x, int y, Graphics g, int direct, int type)    {                //判断是什么类型的坦克        switch(type)        {        case 0:            g.setColor(Color.cyan);            break;        case 1:            g.setColor(Color.yellow);        }                //判断方向        switch(direct)        {        //向上        case 0:            //画出我的坦克            //1.画出左边的矩形            g.fill3DRect(x, y, 5, 30,false);                        //2. 现出右边的矩形            g.fill3DRect(x+15, y, 5, 30,false);                        //3. 画出中间矩形            g.fill3DRect(x+5, y+5, 10, 20,false);                        //4. 画出圆形            g.fillOval(x+5, y+10, 10, 10);                        //5. 画出线            g.drawLine(x+10, y+15, x+10, y);                    }    }}//坦克类class Tank{    int x = 0;        //表示坦克的横坐标    int y = 0;        //表示坦克的纵坐标        Tank(int x, int y)    {        this.x = x;        this.y = y;    }        public int getX() {        return x;    }    public void setX(int x) {        this.x = x;    }    public int getY() {        return y;    }    public void setY(int y) {        this.y = y;    }    }//我的坦克class Hero extends Tank{    public Hero(int x, int y)    {        super(x, y);    }}

 

 

技术分享

 

java - 图形程序设计