【问题标题】:Type ENTER key is not capture输入 ENTER 键不捕获
【发布时间】:2013-03-12 22:11:24
【问题描述】:

在我的应用程序中,我有一个 JTable,我在其中映射了一个 Key 事件。来源:

 getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "selectNextColumnCell");
    getActionMap().put("selectNextColumnCell", new AbstractAction() {

        @Override
        public void actionPerformed(ActionEvent e) {
            //DO SOMETHING
        }
    });

}

但是只有当我按下回车键并且不释放它时才会调用这个动作。但是每次用户输入回车键时我都需要调用这个动作。

【问题讨论】:

    标签: java swing keyboard-events key-bindings


    【解决方案1】:

    请查看我的 put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER.... 语法

    例如

    import java.awt.Dimension;
    import java.awt.GraphicsDevice;
    import java.awt.GraphicsEnvironment;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.AbstractAction;
    import javax.swing.JButton;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.KeyStroke;
    import javax.swing.SwingUtilities;
    
    public class FullScreen {
    
        private static final long serialVersionUID = 1L;
        private GraphicsDevice device;
        private JButton button = new JButton("Close Meeee");
        private JPanel myPanel = new JPanel();
        private JFrame frame = new JFrame();
    
        public FullScreen() {
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    System.exit(0);
                }
            });
            myPanel.setFocusable(true);
            myPanel.add(button);
            frame.add(myPanel);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setUndecorated(true);
            frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
                    KeyStroke.getKeyStroke("ENTER"), "clickENTER");
            frame.getRootPane().getActionMap().put("clickENTER", new AbstractAction() {
                private static final long serialVersionUID = 1L;
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    exitFullScreen();
                }
            });
            enterFullScreen();
            frame.setVisible(true);
    
            // code line for @MOD 
            // from http://stackoverflow.com/questions/15152297/how-to-get-extendedstate-width-of-jframe
    
            Runnable doRun = new Runnable() {
                @Override
                public void run() {
                    System.out.println(frame.getBounds());
                }
            };
            SwingUtilities.invokeLater(doRun);
        }
    
        private void enterFullScreen() {
            GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
            device = graphicsEnvironment.getDefaultScreenDevice();
            if (device.isFullScreenSupported()) {
                device.setFullScreenWindow(frame);
                frame.validate();
            }
        }
    
        private void exitFullScreen() {
            device.setFullScreenWindow(null);
            myPanel.setPreferredSize(new Dimension(400, 300));
            frame.pack();
        }
    
        public static void main(String[] args) {
            Runnable doRun = new Runnable() {
                @Override
                public void run() {
                    FullScreen fullScreen = new FullScreen();
                }
            };
            SwingUtilities.invokeLater(doRun);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-04
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      • 2021-08-26
      相关资源
      最近更新 更多