通过点击键盘上的"输入"关闭JDialog

har*_*ter 0 java swing jdialog

我想通过点击键盘上的"enter"键关闭我的JDialog.我怎样才能做到这一点?谢谢!注意:我想这样做,不涉及任何按钮.谢谢!

Hov*_*els 8

单程:

  • 你可以给它一个关闭的JButton
  • 其ActionListener具有关闭对话框的代码,
  • 并使该按钮成为对话框的rootpane的默认按钮.

例如,

myDialog.getRootPane().setDefaultButton(exitButton);
Run Code Online (Sandbox Code Playgroud)

方案二:

  • 使用键绑定将输入键绑定到AbstractAction中的退出代码.

例如,

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;

import javax.swing.*;

public class DemoDialog {
   public static void main(String[] args) {
      JFrame frame = new JFrame("Frame");
      frame.add(Box.createRigidArea(new Dimension(400, 300)));
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);

      final JDialog dialog = new JDialog(frame, "Dialog", true);

      // set binding
      int condition = JPanel.WHEN_IN_FOCUSED_WINDOW;
      InputMap inputMap = ((JPanel) dialog.getContentPane()).getInputMap(condition);
      ActionMap actionMap = ((JPanel) dialog.getContentPane()).getActionMap();
      String enter = "enter";
      inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), enter);
      actionMap.put(enter, new AbstractAction() {

         @Override
         public void actionPerformed(ActionEvent e) {
            dialog.dispose();
         }
      });

      dialog.add(Box.createRigidArea(new Dimension(200, 200)));
      dialog.pack();
      dialog.setLocationRelativeTo(frame);
      dialog.setVisible(true);

   }
}
Run Code Online (Sandbox Code Playgroud)