点击"关闭JDialog"在键盘上

时间:2014-03-11 12:23:24

标签: java swing jdialog

我想通过点击"输入"来关闭我的JDialog。键盘上的键。我怎样才能做到这一点?谢谢! 注意: 我想这样做,没有涉及任何按钮。 谢谢你!

2 个答案:

答案 0 :(得分:8)

一种方式:

  • 你可以把它关闭JButton
  • 其ActionListener具有关闭对话框的代码
  • 并将该按钮设置为对话框rootpane的默认按钮。

如,

myDialog.getRootPane().setDefaultButton(exitButton);

选项二:

  • 使用键绑定将回车键绑定到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);

   }
}

答案 1 :(得分:1)

首先我要说的是'气垫船充满鳗鱼'解决方案比JDialogSwing API的精神更加优雅。但是,在此处提供替代方案是在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); } } 将根据您的需要执行,而无需添加按钮;

{{1}}

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