why doesn't the frame close when i press the escape key?

后端 未结 4 1715
走了就别回头了
走了就别回头了 2021-01-18 09:53
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;


public class displayFullScreen extends JFrame {
        private JLabel alarmMessage = new JLabel(         


        
相关标签:
4条回答
  • 2021-01-18 10:33

    You are not closing your your frame at esc key. You are just setting its default close operation so you must write

    System.exit(0);
    

    or

    dispose();
    

    instead of

    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    

    If you don't want to exit the application then use setVisible(false).


    Tip:

    VK_ESCAPE is static filed of KeyEvent class so instead of ke.VK_ESCAPE you can write KeyEvent.VK_ESCAPE.

    0 讨论(0)
  • 2021-01-18 10:38

    Use dispose() method.

    addKeyListener(new KeyAdapter() {
     public void keyPressed(KeyEvent ke) {  // handler
        if(ke.getKeyCode() == KeyEvent.VK_ESCAPE) {
          System.out.println("escaped ?");
          displayFullScreen.this.dispose();
          } 
         else {
          System.out.println("not escaped");
          }
         } 
    });
    
    0 讨论(0)
  • 2021-01-18 10:43
    import java.awt.event.ActionEvent;
    import java.awt.event.KeyEvent;
    import javax.swing.AbstractAction;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.KeyStroke;
    
    public abstract class EscapableFrame extends JFrame
    {
        public EscapableFrame()
        {
            // on ESC key close frame
            getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
            KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Cancel"); //$NON-NLS-1$
            getRootPane().getActionMap().put("Cancel", new AbstractAction()
            { 
    
                public void actionPerformed(ActionEvent e)
                {
                    System.exit(0);
                    //framename.setVisible(false);
                }
           });
    
       }
    
    }
    
    0 讨论(0)
  • 2021-01-18 10:54

    The invocation of setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); does not close the frame, it will define the behaviour when the windows decoration [X] close button is pressed (Which you have disabled for full screen). You could replace this with setVisible(false); or exit your programm.

    0 讨论(0)
提交回复
热议问题