0 0

一个swing中组件移动的问题5

在Jframe里面我放了一个map的Jpanel,map里面又放了一个tank的Jpanel,当我试图用setlocation移动tank这个jpanel时,第一次能移动成功,之后就无效了,请问是怎么回事?下面是部分代码:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;

public class Map extends JPanel
{
Image mapImage; //存放坦克图片
TankInfo tank;

public Map()
{
//获取图片并设定初始化map框架
mapImage=TankClient.tk.getImage(Map.class.getClassLoader().getResource("Resource/simple.png"));
setSize(600,400);
setLayout(null);
//让map可以获取焦点来监听键盘
setFocusable(true);
//创建坦克对象
tank=CreateTank(200,300,1,1,TankInfo.Direction.DOWN,this);
add(tank);
//加入键盘监听
addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
switch(e.getKeyCode()){
case KeyEvent.VK_W:
System.out.println("w is pressed");
tank.move();
break;
case KeyEvent.VK_S:
tank.move();
break;
case KeyEvent.VK_A:
tank.move();
break;
case KeyEvent.VK_D:
tank.move();
break;
}
}
});
}

/**
* @param x 初始x坐标
* @param y 初始y坐标
* @param team 所属小组
* @param life 生命值
* @param dir 方向
* @param map 所在地图
* @return 创建的坦克对象
*/
public TankInfo CreateTank(int x,int y,int team,int life,TankInfo.Direction dir,Map map){
TankInfo tank=new TankInfo( x, y, team, life, dir, map);
return tank;
}

//系统自动画出组件
protected void paintComponent(Graphics g)
{
g.drawImage(mapImage, 2, 30, null);
}

}

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;

public class TankInfo extends JPanel
{
//所有方向
enum Direction{LEFT,RIGHT,UP,DOWN,LEFTUP,LEFTDOWN,RIGHTUP,RIGHTDOWN};
//坦克的图片
Image tankImage=TankClient.tk.getImage(TankInfo.class.getClassLoader().getResource("Resource/tank_0.png"));

//坦克当前位置
int x;
int y;

static int speed=50;//速度
int team;//所属小组
int life;//生命值
Direction dir;//坦克方向
Map map;//所在地图

public TankInfo(int x, int y,int team,int life,Direction dir,Map map){
this.x=x;
this.y=y;
this.team=team;
this.life=life;
this.dir=dir;
setSize(60,60);
setLocation(x, y);
this.map=map;
}

public void paintComponent(Graphics g){
g.drawImage(tankImage, 0, 0, null);
}
//移动坦克所在的panel
public void move(){
setLocation(x,y-speed);
}

}
2012年3月30日 10:36

1个答案 按时间排序 按投票排序

0 0

你把代码打包上传上来,给你看看。

2012年3月30日 18:09

相关推荐

    Java Swing中的可拖动组件

    创建有用的可拖动通用组件以创建自定义图形桌面应用程序,例如可视化编辑器或多媒体管理

    swing中的滚动条.doc

    JScrollPane中的ViewPort是一种特殊的对象,通过它就可以查看基层组件,滚动条其实就是沿着组件移动“视点”,这样就可以查看隐藏的部分。

    swing+Java+多线程

    用户能通过GUI组件指定生成小球的数量,每个小球将从随机的位置出现,并具有随机颜色,随机速度以及随机的运动方向,小球沿初始方向匀速运动,当碰到窗口边缘时,小球将依据受力原理改变运动方向(可简化考虑,受力...

    基于Swing的打砖块游戏的Java程序

    程序通过创建Ball、Paddle和Block类来实现游戏的运行逻辑,其中...程序的入口 main 方法通过调用 SwingUtilities.invokeLater 方法来创建一个线程并运行 BreakBlockGame 类,以避免在主线程中创建和显示 Swing 组件。

    随机游戏 Java swing

    自己用netbeans做的一个随机的小游戏 有计时器等等 自己看 是一个jar文件 运行需要Java环境 双击就可运行

    swing-assignmentdialog:用于在两个 JTable 之间移动对象的通用组件

    一个完全通用的 Swing 组件,可让您轻松地在两个列表之间分配任何类型的自定义对象。 Maven < groupId>com.googlecode.swing-assignmentdialog</ groupId> < artifactId>assignmentdialog < version>1.0.0 集成...

    swing蜘蛛纸牌

    //将组件移动到容器中指定的顺序索引。 pane.setComponentZOrder(this, 1); //在Hashtable中保存新的节点信息 main.table.remove(p); p.x += x; p.y += y; this.setLocation(p); main.table.put(p, this)...

    JAVA Swing图形用户界面编程 多线程编程 弹球游戏

    用户能通过GUI组件指定生成小球的数量,每个小球将从随机的位置出现,并具有随机颜色,随机速度以及随机的运动方向,小球沿初始方向匀速运动,当碰到窗口边缘时,小球将依据受力原理改变运动方向(可简化考虑,受力...

    使用JAVA编程一个游戏-老鹰捉小鸡游戏

    这个程序使用 Java 的 Swing 组件库,通过继承 JFrame 和 JPanel 类实现游戏界面和基本功能。主要的类包括 EagleAndChicks、MyPanel 类以及 Point 类。其中 MyPanel 类是游戏主面板,绘制老鹰和小鸡,并用 ArrayList...

    java中 实现无标题无边框的窗体能够用鼠标拖动改变窗口大小

    1、无标题栏,自定义边框,...2、像QQ面板一样,需要时,可以根据需要向上加组件; 3、可以拖动修改大小,拖动移动位置; 4、2种效果比较,demo_02是最终效果,有点小问题,就是左、上拉伸时,右、下有点小小的抖动;

    Java+Swing+IO流-贪吃蛇大作战完整资源

    本资源为基于Java+Swing+IO流实现的贪吃蛇大作战小游戏。实现了界面可视化、基本的吃...资源中包含完整的项目源码以及游戏所有组件的图像资源,供大家下载交流学习! 适用人群:Java初学者,课程设计,大作业,平时练习

    JAVA上百实例源码以及开源项目

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    JAVA 实现《俄罗斯方块升级版》游戏

    游戏主界面采用Swing组件开发,并且向其注册监听器,以实现各种控制功能,综合游戏窗体的设计,其上至少需要注册三个监听器,分别是动作监听器(ActionListener)、键盘监听器(KeyListener)、选项监听器(ItemListener)...

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    Java推箱子的设计流程和实现要点

    游戏面板类(GamePanel): 使用Swing或JavaFX创建一个面板,在其中绘制地图、角色和箱子等元素。监听用户的按键或触摸事件,并转化为游戏内动作。 渲染方法: 更新屏幕显示,根据游戏模型的状态重绘场景。 3. 游戏...

    Java 战斗城市游戏源码项目

    整个游戏或项目使用了java和一些swing组件,使其看起来令人惊讶。玩游戏并享受它。 游戏玩法 整个项目是在 Netbeans IDE 中完成的。为了运行这个项目,您将需要一个 Netbeans IDE。首先,下载该项目,然后解压。打开...

    JAVA程序课程大作业-汉诺塔自动演示.zip

    这还是一个用纯swing组件写的JAVA程序。这个能够模拟1-9层汉诺塔的移动过程,不是简单的消失、重现,而是完整的一个盘子从一个柱子上升、平移、下落到另外一个柱子上的过程。只需你在输入框输入数字,点击确定之后便...

    基于Java的五子棋游戏的设计与实现

    在五子棋游戏的实现中,玩家可以选择与计算机进行对战,或者与另一个玩家进行对战。对于计算机对战模式,系统会使用五子棋的AI算法,如极小极大搜索、α-β剪枝等,来模拟智能下棋的行为,从而提供具有挑战性的对战...

    java 面试题 总结

    在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。...

Global site tag (gtag.js) - Google Analytics