【问题标题】:Dealing with KeyEvents in java在java中处理KeyEvents
【发布时间】:2009-03-26 04:31:44
【问题描述】:

假设我有一个 GUI,我希望程序在按下空格键时实际运行,但如果再次按下空格键,我希望程序退出。像这样的东西有用吗?

public class MouseClicker extends JApplet implements KeyListener{
int counter = 0;
MouseClicker m1 = new MouseClicker();

//all of the other methods

public void keyPressed( KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode==KeyEvent.VK_SPACE){
 m1.click();
 counter ++;
 if(counter%2==0)
  System.exit(0);
}
//other methods needed for KeyListener
}

【问题讨论】:

  • 请注意,计数器确实必须是可变的。

标签: java keylistener


【解决方案1】:

试试看;-)

说真的,你的意思是你想让程序在按下空格键时运行?除非程序已经在运行,否则你将如何接收KeyEvent

至于您问题的另一半,您所拥有的代码通常应该在按下空格键时使 Java 退出。请注意,使用计数器没有意义,因为一旦 Java 退出,计数器的值就会丢失。另请注意,JApplet 是“一般”的例外......您通常不能从小程序调用 System.exit,因为小程序在浏览器的控制下运行,Java 只应该在用户关闭浏览器,而不是在您的小程序完成时。可能有其他小程序在同一个 JVM 中运行,它们可能还没有完成它们正在做的事情。

【讨论】:

  • 我的问题措辞很糟糕,对此感到抱歉。通过运行,我的意思是运行 click() 方法,该方法将继续一遍又一遍地点击同一区域,点击之间的时间间隔,直到按下空格键。那需要线程,对吗?
  • 另外,我的意思是这个程序不是在网页中,而是一个应用程序。 Java 是我唯一的语言,我知道这样做的唯一方法是直接从编译器运行程序。有没有办法让程序作为应用程序运行?
  • 是的;您使用公共静态 void main(String[] args) 方法启动它,并且您将使用 JFrame 而不是 JApplet 作为 GUI 的容器。如果您需要有关该点的更多详细信息,请提出另一个问题。
  • 对于重复单击的事情,是的,您需要使用线程,但 Java 可能有一些可以为您处理线程的东西。但同样,这是另一个问题的问题。
【解决方案2】:

可能,我认为 AWT 代码是正确的,但其余部分非常神秘(不是我不理解它,但它并不能表达你实际上做得很好,是吗?)

怎么样:

boolean running=false;

...
if(running)
    System.exit(0);
else
    running=true;

改为?

更新: 看完你在其他帖子上的讨论,你会有一点陌生感。

有AWT线程的这个概念。使用 AWT 完成的所有操作都必须在该线程上完成。因此,当按下空格键时,您将在 AWT 线程上获得该事件。您可能不想保留它,因为只要您坚持下去,它就会阻止其他图形更新。

我建议看一下 SwingTimer 设置一个摆动计时器每隔几毫秒通知您一次,该通知将进入 AWT 线程,以便您可以使用它来单击您的按钮,然后退出并等待下一个计时器事件.

当他们再次按空格键时,system.exit() 应该可以正常工作。

【讨论】:

  • 是否在 java 中运行预定义的布尔值?
  • 不,第一行代码被附加到我的how about:文本中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
相关资源
最近更新 更多