4

I try to programming a TextEditor. Now I can realize it by adding a button. And I want to realize revoke by pressing 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

Zack
  • 145
  • 1
  • 1
  • 12
  • Possible duplicate of [How to use Ctrl+Z and Ctrl+Y with all Text Components?](http://stackoverflow.com/questions/10532286/how-to-use-ctrlz-and-ctrly-with-all-text-components) or this: http://stackoverflow.com/questions/12030836/undo-functionality-in-jtextarea – Marcinek Dec 22 '15 at 09:00
  • have look at http://stackoverflow.com/questions/2541597/how-to-gracefully-handle-the-sigkill-signal-in-java – mohsen Lzd Dec 22 '15 at 09:02

2 Answers2

2

The way to go would be to add an KeyListener to your user interface.

Oracle has an little tutorial about writing an own here.

Here is an little example checking if CRTL+Z is pressed apllied to a 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);
Felix Gerber
  • 1,615
  • 3
  • 30
  • 40
1

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();
            }
        }
    }
});
Zack
  • 145
  • 1
  • 1
  • 12