2013-03-12 2 views
1

제 애플리케이션에서 Key 이벤트를 매핑 한 JTable이 있습니다. 출처 :유형 ENTER 키가 캡처되지 않습니다.

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 
     } 
    }); 

} 

하지만이 작업은 내가 Enter 키를 눌렀을 때만 호출되고 해제되지 않습니다. 하지만 사용자가 엔터 키를 입력 할 때마다이 작업을 호출해야합니다.

답변

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); 
    } 
} 
관련 문제