gpt4 book ai didi

java - keyListener 有问题

转载 作者:行者123 更新时间:2023-12-02 06:47:42 27 4
gpt4 key购买 nike

我正在尝试用java进行一个简单的 react 测试。当屏幕变绿时,我按空格键,女巫应该将 boolean 值“单击为 false 并停止测量时间的循环。实际上,关键监听器什么也不做。我是否将 keay 监听器添加到正确的组件(jpanel 面板)?还有其他问题吗?

    import java.awt.Color;
import java.awt.RenderingHints.Key;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;

public class mainCheck {
// //////////////////////////////////////
public static void timeKeeper() {
boolean clicked=false;
long time = 10000;
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
panel.setBackground(Color.GREEN);
while (time > 0 && !clicked) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
time--;
}
panel.setBackground(Color.gray);
long time2= 10000-time;
JLabel x = new JLabel("" +time2+"");
panel.add(x);
}

// //////////////////////////////////////
static boolean clicked;
JFrame frame;
static JPanel panel;

public mainCheck() {
frame = new JFrame();
panel = new JPanel();
clicked = false;
Handler handler = new Handler();
frame.addKeyListener(handler);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,500);
frame.setVisible(true);
}
// //////////////////////////////////////

public static void main(String[] args) {
mainCheck f = new mainCheck();
panel.getActionMap();
f.timeKeeper();
}

// //////////////////////////////////////
public class Handler implements KeyListener {

@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
}

@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}

@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
clicked = false;
System.out.println("space pressed");
}
}
}
}

最佳答案

  • 不要使用Thread.sleep(5000); block Event Dispatch Thread在 sleep 期间,您可能会将所有事件丢失到已经可见的 Swing GUI

  • 使用Swing Timer相反

  • Thread.sleep(1); 可以是太空环境的适当延迟,非人类, native 操作系统中非常短的攻击延迟(8-14毫秒,取决于 native 操作系统)

  • JLabel x = new JLabel(""+time2+"");panel.add(x); 在 AWT/Swing 中不是任何删除或添加 JComponents 的某些、任何部分的通知程序必须通知使用的 LayoutManager(JPanelFlowLayou) >t in API)通过使用方法revalidaterepaint,例如

.

JLabel x = new JLabel("" +time2+"");
panel.add(x);
panel.revalidate();
panel.repaint();

关于java - keyListener 有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18442593/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com