java - java中ctrl+z如何实现撤销

标签 java

我尝试编写一个 TextEditor。现在我可以通过添加一个按钮来实现它。而我想通过Ctrl+Z实现撤销。如何处理? 请给我一些建议。

现在我可以通过

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) {

    }
});

为什么这不能?

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) {

    }
});

为什么这不能?

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) {

    }
});

@菲利克斯格柏

最佳答案

要走的路是添加一个 KeyListener到您的用户界面。

Oracle 有一个关于编写自己的 here 的小教程.

这是一个检查 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);

关于java - java中ctrl+z如何实现撤销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34411898/

相关文章:

堆栈的Java实现

java - 自动更新jtextfield

java - 为什么菱形运算符用于 Java 7 中的类型推断?

java - 安卓 MySQL : JDBC CommunicationsException

java - 用 Java 打印 DOM 树?

java - 如何将数字字符串转换为字符

java - 可扩展 ListView subview 问题

java - 使用spring-boot的嵌入式Tomcat 7集群

java - play框架2.4 ebean [PersistenceException : Property [] not found on models. SearchContent]

java - 我在连接 sql server 时遇到异常