首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有多个操作的Java键绑定

具有多个操作的Java键绑定
EN

Stack Overflow用户
提问于 2015-04-09 16:48:58
回答 1查看 431关注 0票数 0

因此,作为参考,我正在跟踪Trystan关于java的roguelike教程

上面的教程使用关键侦听器,它不适用于Mac (社区似乎不鼓励),所以我尝试更改代码以使用键绑定。

这里有个问题。在他的"roguelike游戏“中,游戏分为屏幕,每个屏幕对于一个特定的键都有不同的动作。例如,“开始屏幕”在按enter键时将播放机发送到“播放屏幕”:

代码语言:javascript
运行
复制
public class StartScreen implements Screen {

    public void displayOutput(AsciiPanel terminal) {
        terminal.write("rl tutorial", 1, 1);
        terminal.writeCenter("-- press [enter] to start --", 22);
    }

    public Screen respondToUserInput(KeyEvent key) {
        return key.getKeyCode() == KeyEvent.VK_ENTER ? new PlayScreen() : this;
    }
}

当“播放屏幕”按下enter键将播放机发送到"Win屏幕“时:

代码语言:javascript
运行
复制
public class PlayScreen implements Screen {

    public void displayOutput(AsciiPanel terminal) {
        terminal.write("You are having fun.", 1, 1);
        terminal.writeCenter("-- press [escape] to lose or [enter] to win --", 22);
    }

    public Screen respondToUserInput(KeyEvent key) {
        switch (key.getKeyCode()){
        case KeyEvent.VK_ESCAPE: return new LoseScreen();
        case KeyEvent.VK_ENTER: return new WinScreen();
        }

        return this;
    }
}

现在,从键绑定示例(如 )中可以看到,所有绑定和操作似乎都“转储”到一个类中。这是不能令人满意的,因为:

  1. 一次击键只会导致一个操作(我想我可以让操作做一个开关情况,检查我在哪个屏幕上,然后执行一些特定于所述屏幕的代码,但也许有更好的方法)。
  2. 要确定什么是来自哪个屏幕的操作变得更加困难。

是否有一种方法可以使键绑定使一次击键根据“屏幕”执行不同的操作?我能用条件吗?我是否可以将键绑定逻辑放在其他类(屏幕)中,然后在主类中调用它们,就像上面的键侦听器所发生的那样?

EN

回答 1

Stack Overflow用户

发布于 2015-04-09 17:12:17

键绑定不一定转储到一个类中。它们与输入映射相关联,而输入映射又与特定的JComponent相关联。如果在表示该屏幕的WHEN_ANCESTOR_OF_FOCUSED_COMPONENT输入映射中注册屏幕特定的绑定,则当该屏幕中的任何组件都具有键盘焦点时(假设其中的某个组件没有覆盖其自身的绑定),则会识别它们,但当另一个屏幕中的组件具有焦点时则不会。

总的来说,该系统非常灵活。您可能会考虑阅读关于本主题的Java教程部分来提高自己的速度。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29544407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档