Java keyListener 不适用于 BasicConstruct

标签 java

我正在使用 j3d 测试一些东西,但我似乎无法让 keylistener 为 BasicConstruct 工作。当我按 38 键(向上)中的任何一个时,它没有执行任何操作,甚至没有将调试输出输出到控制台。这是我的主课“BasicConstruct”的一部分。这是它应该注册的地方:

@SuppressWarnings("deprecation")  //for the bc.show(true);
public static void main(String[] argv) {
    bc = new BasicConstruct();

    bc.setTitle("3D Rendering");

    bc.setSize(500, 500);
    bc.setLocationRelativeTo(null);
    bc.setDefaultCloseOperation(EXIT_ON_CLOSE);
    bc.refresh(addBox(0f, 0f, 0f, 0.005f, 0.5f, 0.5f, 
        new Color3f(1, 0, 0), new Color3f(1, 0, 0)));  //draws a box on screen. not relevant to the queston

    bc.setFocusable(true);
    bc.addKeyListener(new PopClickListener());

    bc.addDirectionalLight(new Vector3f(0f, 0f, -1f), new Color3f(1f, 1f, 0f));
    bc.finalise(rootBranchGroup);
    bc.show(true);
}

和 PopClickListener 类(懒得重命名它):

import java.applet.Applet;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import javax.vecmath.Color3f;
public class PopClickListener extends Applet implements KeyListener {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == 38){
            BasicConstruct.placeblockonscreen(BasicConstruct.bc, randInt(.1f, 0f),
                randInt(1f, 0f), randInt(.1f, 0f), randInt(.1f, 0f), randInt(.1f, 0f),
                randInt(.1f, 0f), new Color3f(10, 10, 10), new Color3f(10, 10, 10));
                System.out.println("hey"); //debug
        }
    }
    public void keyReleased(KeyEvent e) {}
    public void keyTyped(KeyEvent e) {}

    public static float randInt(float min, float max) {

        Random rand = new Random();

        float finalfloat = rand.nextFloat() * (max - min) + min;

        return finalfloat;
    }
}

最佳答案

首先,确保通过在 if 之外放置 System.out.println("KEY PRESSED"); 来调用 keyPressed()语句,但仍在方法内部。如果有效,请更改代码,使其显示按键字符、按键代码以及有关 KeyEvent 的一些其他内容。这将告诉您正在按下哪个键。最后,我建议使用 KeyEvent.VK_UP 而不是整数 38 以确保预期结果。

关于Java keyListener 不适用于 BasicConstruct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25713646/

相关文章:

java - 用java读取输入文件

java - windows 7 java weka 的类路径在哪里

java - 断路器立即回退

Java数组 - 初始化数组上的越界异常

java - 在camel DSL中表示来自xml的路由列表

java - 在Java嵌套类中,封闭类可以访问内部类的私有(private)成员吗?

java - 从 Java 回调中获取值

java - 在java中从zip中提取后保留文件校验和

java - 如何优化此正则表达式以在空格和标点符号(减去撇号)上拆分行

java - 如何使用波斯 JDF 日期类?