首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Piccolo2D中接收键盘事件?

如何在Piccolo2D中接收键盘事件?
EN

Stack Overflow用户
提问于 2013-11-21 16:06:55
回答 1查看 185关注 0票数 0

下面这两个处理程序都是按键时执行的:

代码语言:javascript
复制
public class Try_KeyboardInput_01 {

    private static final Logger log = LoggerFactory.getLogger(Try_KeyboardInput_01.class);

    @SuppressWarnings("serial")
    public static void main(String[] args) {
        new PFrame() {
            @Override
            public void initialize() {

                PPath circle = PPath.createEllipse(-100, -100, 200, 200);

                getCanvas().getLayer().addChild(circle);

                circle.addInputEventListener(new PBasicInputEventHandler() {
                    @Override
                    public void keyPressed(PInputEvent event) {
                        log.info("Key pressed on circle");
                    }
                });

                getCanvas().getLayer().addInputEventListener(new PBasicInputEventHandler() {
                    @Override
                    public void keyPressed(PInputEvent event) {
                        log.info("Key pressed on layer");
                    }
                });

                getCanvas().addInputEventListener(new PBasicInputEventHandler() {
                    @Override
                    public void keyPressed(PInputEvent event) {
                        log.info("Key pressed on canvas");
                    }
                });



            }
        };
    }
}

如何激活功能?

更新

在我看到的一些演示中,键盘焦点可以从鼠标处理程序中打开。但是,如果计算机没有鼠标,或者键盘处理应该在默认情况下打开,这是不可接受的。

如何显式地打开键盘处理?

更新2

仍然不明白,如果可以设置键盘焦点在特定的节点(没有鼠标)。

EN

回答 1

Stack Overflow用户

发布于 2013-11-21 17:08:42

要接收键盘事件,必须使用PInputManager.setKeyboardFocus设置处理程序。例如:

代码语言:javascript
复制
getCanvas().getRoot().getDefaultInputManager().setKeyboardFocus(new PBasicInputEventHandler() {
    @Override
    public void keyPressed(PInputEvent event) {
        switch (event.getKeyCode()) {
        //TODO
        }
    }
});

或基于节点:

代码语言:javascript
复制
PBasicInputEventHandler handler = new PBasicInputEventHandler() {
    @Override  
    public void mousePressed(final PInputEvent event) {
        event.getInputManager().setKeyboardFocus(event.getPath());
        event.setHandled(true);
    }

    @Override
    public void keyPressed(PInputEvent event) {
        System.out.println(event.getPickedNode());
    }
};

有许多变化,取决于实际情况。有关开发人员打算如何处理键盘事件的一些示例,请参阅PSelectionEventHandlerKeyEventFocusExample源代码。

编辑:

代码语言:javascript
复制
import java.awt.event.KeyEvent;
import edu.umd.cs.piccolo.PNode;
import edu.umd.cs.piccolo.event.PBasicInputEventHandler;
import edu.umd.cs.piccolo.event.PInputEvent;
import edu.umd.cs.piccolo.nodes.PPath;
import edu.umd.cs.piccolox.PFrame;

public class DemoKeyboard {
    static class SampleHandler extends PBasicInputEventHandler {
        private PNode activeNode;

        public void setActiveNode(PNode activeNode) {this.activeNode = activeNode;}
        public PNode getActiveNode() {return activeNode;}

        @Override
        public void keyPressed(PInputEvent event) {
            if (activeNode == null)
                return;
            switch (event.getKeyCode()) {
            case KeyEvent.VK_LEFT: activeNode.translate(-5, 0); break;
            case KeyEvent.VK_UP: activeNode.translate(0, -5); break;
            case KeyEvent.VK_RIGHT: activeNode.translate(5, 0); break;
            case KeyEvent.VK_DOWN: activeNode.translate(0, 5); break;
            }
        }
    };

    public static void main(String[] args) {
        new PFrame() {
            @Override
            public void initialize() {
                final PPath circle = PPath.createEllipse(0, 0, 200, 200);
                getCanvas().getLayer().addChild(circle);

                SampleHandler handler = new SampleHandler();
                handler.setActiveNode(circle);
                getCanvas().getRoot().getDefaultInputManager().setKeyboardFocus(handler);
            }
        };
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20126009

复制
相关文章

相似问题

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