所以在过去的一天半时间里,我一直被这个问题所困扰。我试图在我的LWJGL游戏中实现一个2D可写的文本框。文本框的呈现不是问题,并且工作得完美无缺。
然而,我的投入并不是很好。问题是我不知道如何检测单键按下,所以它没有在输入字符串中添加“a”,而是添加了“aaaaaaaaaaaaaaaaaaa”,因为游戏时钟很快。
这是我的代码:
private boolean canType = false;
private static long curTime= System.currentTimeMillis();
private static long keyTypeTime = System.currentTimeMillis();
String input = "";
// Game loop
// I'm using a timer to limit typing, which doesn't work that well.
if (curTime - keyTypeTime >= 100) {
keyTypeTime = System.currentTimeMillis();
canType = true;
}
if (canType) {
char c = Keyboard.checkAllKeys();
canType = false;
if (c != '*') {
if (c == '/') {
System.out.println("backspace");
if (input != null && input.length() > 0) {
input = input.substring(0, input.length() - 1);
}
} else if (c == '{') {
storyLogic();
} else {
input += c;
}
}
}
package me.mateo226.main;
public static boolean[] keys = new boolean[65536];
// The GLFWKeyCallback class is an abstract method that
// can't be instantiated by itself and must instead be extended
//
@Override
public void invoke(long window, int key, int scancode, int action, int mods) {
// TODO Auto-generated method stub
keys[key] = action != GLFW_RELEASE;
}
// boolean method that returns true if a given key
// is pressed.
public static boolean isKeyDown(int keycode) {
return keys[keycode];
}
public static char checkAllKeys() {
char key = '*';
if(isKeyDown(GLFW_KEY_A)) {
key = 'a';
}
if(isKeyDown(GLFW_KEY_Z)) {
key = 'z';
}
if(isKeyDown(GLFW_KEY_SPACE)) {
key = ' ';
}
if(isKeyDown(GLFW_KEY_BACKSPACE)) {
key = '/';
}
if(isKeyDown(GLFW_KEY_ENTER)) {
key = '{';
}
return key;
}
谢了!
string key2 = null;
public static char checkAllKeys() {
char key = '*';
if(isKeyDown(GLFW_KEY_A)) {
key2 = 'a';
}
if(isKeyDown(GLFW_KEY_Z)) {
key2 = 'z';
}
if(isKeyDown(GLFW_KEY_SPACE)) {
key2 = ' ';
}
if(isKeyDown(GLFW_KEY_BACKSPACE)) {
key2 = '/';
}
if(isKeyDown(GLFW_KEY_ENTER)) {
key2 = '{';
}
if(!isKeyDown(GLFW_KEY_A)&&key2=='a') {
key = 'a';
key2 = null;
}
if(!isKeyDown(GLFW_KEY_Z)&&key2=='z') {
key = 'z';
key2 = null;
}
if(!isKeyDown(GLFW_KEY_SPACE)&&key2==' ') {
key = ' ';
key2 = null;
}
if(!isKeyDown(GLFW_KEY_BACKSPACE)&&key2=='/') {
key = '/';
key2 = null;
}
if(!isKeyDown(GLFW_KEY_ENTER)&&key2=='{') {
key = '{';
key2 = null;
}
}
我想控制Javafx TextField中的输入,以便只允许数字输入,并且如果超过了最大字符数,则不会对TextBox进行任何更改。 编辑:根据注释中的建议,我使用了JavaFX项目负责人建议的方法。阻止信件被输入很有效。我只需要它也过滤特殊字符。我尝试将筛选器更改为(text.matchs([0-9]“),但这不允许输入退格符。
问题内容: 有人知道如何将文本框中的键盘插入符移动到特定位置吗? 例如,如果一个文本框(例如,输入元素,而不是文本区域)中包含50个字符,而我想将插入号放置在字符20之前,我该如何处理? 这与以下问题有所不同:jQuery在TextArea中设置光标位置,这需要jQuery。 问题答案: 摘自Josh Stodola的使用Javascript在Textbox或TextArea中设置键盘插入符号的位
问题内容: 我正在用Java编写游戏,现在是Swing + JOGL-一个带有GLCanvas的JFrame。 我使用etc.事件()处理输入,但似乎无法正常工作: 当我同时按下3个以上的键时,它们无法正确注册 -显然这是键盘的错误,我必须找到替代的控制方案。 窗口丢失后,重新获得焦点,输入完全停止工作… 我究竟做错了什么? 有没有更好的方法来处理Java中的键盘输入? (除非我别无选择,否则我不
问题内容: 我正在开发一个使用WebView指向基于jQueryMobile的站点的Android应用程序。通常,禁用软键盘上的“转到”按钮就像添加到控件的XML标签一样简单。但是,对于WebViews而言,这样做并不成功。 如何禁用自动执行表单提交的“开始”按钮,或者像EditText 那样简单地将其替换为“完成”按钮? 问题答案: 您可以通过放置表单事件来停止提交表单。
点击文本输入框,如何屏蔽系统默认键盘弹起行为