在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);
}
}
相关推荐
创建有用的可拖动通用组件以创建自定义图形桌面应用程序,例如可视化编辑器或多媒体管理
JScrollPane中的ViewPort是一种特殊的对象,通过它就可以查看基层组件,滚动条其实就是沿着组件移动“视点”,这样就可以查看隐藏的部分。
用户能通过GUI组件指定生成小球的数量,每个小球将从随机的位置出现,并具有随机颜色,随机速度以及随机的运动方向,小球沿初始方向匀速运动,当碰到窗口边缘时,小球将依据受力原理改变运动方向(可简化考虑,受力...
程序通过创建Ball、Paddle和Block类来实现游戏的运行逻辑,其中...程序的入口 main 方法通过调用 SwingUtilities.invokeLater 方法来创建一个线程并运行 BreakBlockGame 类,以避免在主线程中创建和显示 Swing 组件。
自己用netbeans做的一个随机的小游戏 有计时器等等 自己看 是一个jar文件 运行需要Java环境 双击就可运行
一个完全通用的 Swing 组件,可让您轻松地在两个列表之间分配任何类型的自定义对象。 Maven < groupId>com.googlecode.swing-assignmentdialog</ groupId> < artifactId>assignmentdialog < version>1.0.0 集成...
//将组件移动到容器中指定的顺序索引。 pane.setComponentZOrder(this, 1); //在Hashtable中保存新的节点信息 main.table.remove(p); p.x += x; p.y += y; this.setLocation(p); main.table.put(p, this)...
用户能通过GUI组件指定生成小球的数量,每个小球将从随机的位置出现,并具有随机颜色,随机速度以及随机的运动方向,小球沿初始方向匀速运动,当碰到窗口边缘时,小球将依据受力原理改变运动方向(可简化考虑,受力...
这个程序使用 Java 的 Swing 组件库,通过继承 JFrame 和 JPanel 类实现游戏界面和基本功能。主要的类包括 EagleAndChicks、MyPanel 类以及 Point 类。其中 MyPanel 类是游戏主面板,绘制老鹰和小鸡,并用 ArrayList...
1、无标题栏,自定义边框,...2、像QQ面板一样,需要时,可以根据需要向上加组件; 3、可以拖动修改大小,拖动移动位置; 4、2种效果比较,demo_02是最终效果,有点小问题,就是左、上拉伸时,右、下有点小小的抖动;
本资源为基于Java+Swing+IO流实现的贪吃蛇大作战小游戏。实现了界面可视化、基本的吃...资源中包含完整的项目源码以及游戏所有组件的图像资源,供大家下载交流学习! 适用人群:Java初学者,课程设计,大作业,平时练习
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
游戏主界面采用Swing组件开发,并且向其注册监听器,以实现各种控制功能,综合游戏窗体的设计,其上至少需要注册三个监听器,分别是动作监听器(ActionListener)、键盘监听器(KeyListener)、选项监听器(ItemListener)...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
游戏面板类(GamePanel): 使用Swing或JavaFX创建一个面板,在其中绘制地图、角色和箱子等元素。监听用户的按键或触摸事件,并转化为游戏内动作。 渲染方法: 更新屏幕显示,根据游戏模型的状态重绘场景。 3. 游戏...
整个游戏或项目使用了java和一些swing组件,使其看起来令人惊讶。玩游戏并享受它。 游戏玩法 整个项目是在 Netbeans IDE 中完成的。为了运行这个项目,您将需要一个 Netbeans IDE。首先,下载该项目,然后解压。打开...
这还是一个用纯swing组件写的JAVA程序。这个能够模拟1-9层汉诺塔的移动过程,不是简单的消失、重现,而是完整的一个盘子从一个柱子上升、平移、下落到另外一个柱子上的过程。只需你在输入框输入数字,点击确定之后便...
在五子棋游戏的实现中,玩家可以选择与计算机进行对战,或者与另一个玩家进行对战。对于计算机对战模式,系统会使用五子棋的AI算法,如极小极大搜索、α-β剪枝等,来模拟智能下棋的行为,从而提供具有挑战性的对战...
在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。...