我正在使用 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/