一、创建框架
框架(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); } }
时间: 2024-10-13 23:10:20