简体   繁体   English

如何在java中按Ctrl + z实现撤销

[英]How to realize revoke by pressing Ctrl+z in java

I try to programming a TextEditor. 我尝试编写TextEditor。 Now I can realize it by adding a button. 现在我可以通过添加一个按钮来实现它。 And I want to realize revoke by pressing Ctrl+Z . 我想通过按Ctrl+Z来实现撤销。 How to deal with it ? 怎么处理呢? Please give me some suggestions. 请给我一些建议。

now i can realize it by 现在我可以实现它

jta.addKeyListener(new KeyListener() {

    @Override
    public void keyTyped(KeyEvent e) {
        if((e.getKeyChar() == 0x1a)) {
            if(doManager.canUndo()) {
                doManager.undo();
            }
            System.out.println(1);
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {

    }
});

Why this can't? 为什么这不行?

jta.addKeyListener(new KeyListener() {

    @Override
    public void keyTyped(KeyEvent e) {
        if((e.getKeyCode() == KeyEvent.VK_Z) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
            if(doManager.canUndo()) {
                doManager.undo();
            }
            System.out.println(1);
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {

    }
});

Why this can't? 为什么这不行?

jta.addKeyListener(new KeyListener() {

    @Override
    public void keyTyped(KeyEvent e) {
        if((e.getKeyCode() == KeyEvent.VK_Z) && (e.isControlDown() == true)) {
            if(doManager.canUndo()) {
                doManager.undo();
            }
            System.out.println(1);
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {

    }
});

@Felix Gerber @Felix Gerber

The way to go would be to add an KeyListener to your user interface. 要做的就是将KeyListener添加到用户界面。

Oracle has an little tutorial about writing an own here . Oracle有一个关于在这里编写自己的小教程。

Here is an little example checking if CRTL+Z is pressed apllied to a JFrame : 这是一个小例子,检查CRTL+Z是否被压缩到JFrame

    JFrame frame = new JFrame();
    frame.addKeyListener(new KeyListener() {

        @Override
        public void keyTyped(KeyEvent e) {


        }

        @Override
        public void keyReleased(KeyEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void keyPressed(KeyEvent e) {
            if ((e.getKeyCode() == KeyEvent.VK_Z) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) 
            {
                System.out.println("Your code here!");
            }
        }
    });
    frame.setLocationRelativeTo(null);
    frame.setSize(200, 200);
    frame.setVisible(true);

Thanks everybody! 谢谢大家!

now i can realize it by 现在我可以实现它

jta.addKeyListener(new KeyListener() {

    @Override
    public void keyTyped(KeyEvent e) {
        if((e.getKeyChar() == 0x1a)) {
            if(doManager.canUndo()) {
                doManager.undo();
            }
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {

    }
});

and

jta.addKeyListener(new KeyListener() {

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyReleased(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {
        if((e.getKeyCode() == KeyEvent.VK_Z) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
            if(doManager.canUndo()) {
                doManager.undo();
            }
        }
    }
});

and

jta.addKeyListener(new KeyListener() {

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyReleased(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {
        if((e.getKeyCode() == KeyEvent.VK_Z) && (e.isControlDown() == true)) {
            if(doManager.canUndo()) {
                doManager.undo();
            }
        }
    }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM