java—按键盘上的“回车”键关闭jdialog

7ivaypg9  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(300)

我想通过按键盘上的“回车”键来关闭jdialog。我该怎么做?谢谢您!注意:我想这样做,不涉及任何按钮。谢谢您!

yrefmtwq

yrefmtwq1#

首先,我想说的是‘充满鳗鱼的气垫船’的解决方案比这一个更优雅,更符合人类的精神 JDialog 以及 Swing 应用程序编程接口。然而,这里提供一个替代方案是使用 KeyListener 在你的 JDialog 这将做你需要的没有添加一个按钮;

public class Test {

public static void main(String[] args) {
    JDialog jd = new JDialog();

    // Add and define the KeyListener here!
    jd.addKeyListener(new KeyListener(){  

        @Override
        public void keyTyped(KeyEvent e) {
            // Nothing
        }

        @Override
        public void keyPressed(KeyEvent e) {
            // Nothing 
        }

        @Override
        public void keyReleased(KeyEvent e) {
            if(e.getKeyCode() == KeyEvent.VK_ENTER){
                JDialog d = (JDialog)e.getSource();
                d.dispose();
                }
            }
        });        
    // End key listener code
        jd.setVisible(true);
    }
}

重要/相关代码位于两个主要注解之间。这是一个可编译的示例,因此您可以将其复制粘贴到一个新文件中并运行它以查看效果。

v1l68za4

v1l68za42#

单向:
你可以把它关上
他的actionlistener有关闭对话框的代码,
并使该按钮成为对话框根窗格的默认按钮。
例如。,

myDialog.getRootPane().setDefaultButton(exitButton);

方案二:
使用键绑定将enter键绑定到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);

   }
}

相关问题