java的gui编程,高手来救啊

我现在用java做一个 坦克大战的游戏(以前小霸王上面的那种)
遇到了一些问题
要捕获键盘输入 该对哪个组件 addKeyListener呢?
我现在是对JFrame的一个对象addListener并且让它保持焦点 其他组件都不保持焦点
但是我总觉得这种方法很丑
我想应该还有更好的办法?请问有吗?
我实现成 按了↑ 向上键 坦克就向上跑
不过如果上和右同时按住的话 只会向一个方向跑(这点很我能接受)
但是按住两个键再放开之后 另外一个键就不输入了(此时需要松开按键 然后再次按下才有效果)
你们可以打开一个记事本 然后按住a不放这时输出一堆a 然后再按住b这时输出一堆b
然后松开b a还是保持按着 然后这个时候a也不输出了
因为这个原因 我的坦克开起来总是一卡一卡的 非常不流畅
如果这个问题可以解决的话 我的坦克就可以边开变放子弹了
先帮我把上面的两个问题给解决了
两个问题都要哦!!!

第1个回答  2013-10-21
监听的目前没有啥好的想法
关于按键的有点,给你分享一下,理解不对的话,见谅啊。

你的问题现在是,先按住上方向键,坦克向上走,按住上键,又按住左键了,坦克向左走,此时放开左键了,坦克没有继续向上走,而需要你重新按向上键。

如果我理解对了,你继续看,不对就算了、、、
如果是上面的问题,你程序的处理应该是监听到Key按下事件,然后根据Key的值,向不同的方向移动,监听到Key放开事件,就停止移动

如果想继续移动,可以通过程序去判断:
1:在监听类,中定义一个Map<Integer> 保存按下的Key
2:监听到Key按下事件,把Key保存到Map中,并向改方向移动。
3:监听到Key放开事件,把Key从Map中移除,并判断Map是否为空,为空停止移动,如果不为空,获取Map中的Key值,继续向Key所指向方向移动

注:这个方法只支持最多按两个键,多了的话,比如现在按住3个键,放开一个了,不处理的话,因为Map不是排序的,随便获取一个Key的话,移动的方向可能不是自己想要的,如果要支持多键的,可以使用LinkedMap,他可以保存按键的保存顺序,比如按键的顺序为a,b,c 放开c的时候,迭代Map,第一个一定是b,你可以向b方向移动,放开b的时候,迭代Map,获取就是a了
第2个回答  2013-10-21
分没有。。。
主要听不懂lz说什么。。。
问题在简短点??

Java GUI 桌面应用开发
Java提供了一系列工具来构建GUI,主要包含三个包:java.awt包提供字体\/布局管理器,javax.swing包提供组件如窗口、按钮、文本框等,java.awt.event包负责事件处理。Swing组件相较于AWT组件提供了更多丰富、快捷且强大的GUI组件,包括顶层容器、中间容器、基本组件等。JFormDesigner是一款高级Swing GUI设计器...

java的gui程序设计
\/\/导入swing图形界面开发常用的3个包import java.awt.*;import java.awt.event.*;import javax.swing.*;public class AddFrame extends JFrame implements ActionListener {JTextField jtf1, jtf2, jtf3;public AddFrame() {JPanel jpcenter = new JPanel(new GridLayout(3, 2)); \/\/创建面板,...

编写一个Java GUI
(如果点击按钮后没有任何变化,将窗口最小化一下就有了)没有出现这个问题的话,也请告诉我一下~import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;public class painting extends JFrame implements ActionListener{ private JButton round,rectangle,ellipse,beeli...

哪位好心人可以帮忙写下这个JAVA编程题?
用java编写GUI程序,可以创建一个按钮,并实现在点击按钮后在界面上画一个矩形的功能。实现此功能的具体步骤如下:1.创建一个Swing窗体,并添加按钮和标签控件,完成界面布局。2.为按钮添加监听事件,在点击按钮时调用Graphics类的fillRect方法画出一个矩形。3.将图形绘制到窗体的内存缓冲区中,然后重新绘...

GUI画图板(绘图板)设计,用Java编写程序代码!!谢谢!!
GUI画图板(绘图板)设计,用Java编写程序代码!!谢谢!! 实验内容:画板程序至少要实现如下功能:1、使用ComboBox列出可以绘制的图形(至少包括点、线、矩形、圆形、圆弧),用户可以使用组合框选择要绘制的图形;提供一组按钮(13个)可以让... 实验内容:画板程序至少要实现如下功能:1、使用ComboBox列出可以绘制的图形(至少...

java编程中,GUI界面的一般框架有什么??希望大神给写个程序实例,程序内 ...
java GUI一般,通过AWT,SWING 实现 其余比较流行的是SWT,但是它不是官方库, 并且不能跨平台 \/\/注意:Swing, 所以很多不涉及界面组件的一些类比如布局 等Swing也可以使用 但是组件,最好不要混用, 容易出现一些组件叠加,等显示错误 比如JButton TextField等混用 \/\/参考代码 下面使用Swing组件来实现 imp...

java(GUI)图形接口编程求教
而你在40行写的构造函数里windchill的w是大写的,所以没有被当作构造函数,你把两个单词的大小写改一致就行了。犯这个错误还是比较粗心了 ___这儿:\/\/显示GUI window.show();} 如果你用的JRE是1.4以上的,那么show的方法就过时了,应该用window.setVisible(true);...

GUI程序设计(java)
import java.awt.*;import java.awt.event.*;public class CalculatorFrame extends JFrame { private JTextField txtDis = new JTextField("0", 16); \/\/显示文本框 private JButton[] btnGrp = new JButton[17]; \/\/17个按钮 private JPanel jpnMain = new JPanel(); \/\/主面板 private J...

编写一个java GUI程序(其实帮我改改)
程序基本没问题,在public void paint(Graphics g)中加上如下程序就可以了。public void paint(Graphics g){ switch(i){ case 1: g.drawOval(20,20,40,40);break;case 2: g.drawRect(20,20,40,40);break;case 3: g.drawOval(20,30,40,50);break;case 4: g.drawLine(20,20,40,40...

JAVA的GUI编程是不是很重要?
不是 其实初学学JAVA不太好 因为太容易 没有C++那种底层的东西 JAVA在GUI方面和C++ VB不能比 JAVA真正擅长的是在服务器方面 学习JAVA一定要把重点放在服务器编程这块

相似回答