我可以防止JDialog在退出/输入时关闭吗?

山姆

我创建了一个对话框,接受用户击键来更改菜单项的键绑定。我希望Enter和Escape是用户可以绑定的键,但是它们都关闭了对话框。这些新闻如何被拦截?

编辑:使用JOptionPane和自定义组件创建对话框

GetKeyComponent comp = new GetKeyComponent(accels, menuItem);
Object[] array = { comp };
JOptionPane optionPane = new JOptionPane(array, 
    JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
充满鳗鱼的气垫船

编辑:使用JOptionPane和自定义组件创建对话框

一种解决方案:不要这样做。创建您自己的模式JDialog,设置其KeyBindings并使用它。例如,

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;    
import javax.swing.*;

public class JDialogTest {
   private static void createAndShowGUI() {
      final JFrame frame = new JFrame("JDialogTest");

      JPanel panel = new JPanel();
      panel.add(new JButton(new AbstractAction("Push Me") {

         @Override
         public void actionPerformed(ActionEvent arg0) {
            final JTextArea textArea = new JTextArea(15, 30);
            textArea.setFocusable(false);
            JDialog dialog = new JDialog(frame, "Dialog", true);

            int condition = JComponent.WHEN_IN_FOCUSED_WINDOW;
            JPanel contentPane = (JPanel) dialog.getContentPane();
            InputMap inputMap = contentPane.getInputMap(condition);
            ActionMap actionMap = contentPane.getActionMap();

            KeyStroke enterKs = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
            inputMap.put(enterKs, enterKs.toString());
            actionMap.put(enterKs.toString(), new AbstractAction() {

               @Override
               public void actionPerformed(ActionEvent arg0) {
                  textArea.append("Enter pushed\n");
               }
            });

            KeyStroke escKs = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
            inputMap.put(escKs, escKs.toString());
            actionMap.put(escKs.toString(), new AbstractAction() {

               @Override
               public void actionPerformed(ActionEvent arg0) {
                  textArea.append("Escape pushed\n");
               }
            });


            dialog.add(new JScrollPane(textArea));
            dialog.pack();
            dialog.setVisible(true);
         }
      }));

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(panel);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGUI();
         }
      });
   }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以防止tilda隐藏吗?

我可以防止Fabric提示我输入sudo密码吗?

我可以防止控制台使用键盘输入吗?

可以防止multitail关闭“完成的”命令窗口吗?

我可以防止类被非抽象对象继承吗?

我可以防止Java引发某些异常吗?

我可以防止生成App.gics吗?

我可以防止将“ def”替换为“ val”吗?

我可以防止Babel遍历插件插入的代码吗?

我可以防止对象被std :: memcpy复制吗?

我可以防止无效的minidump文件名吗

我可以防止样式规则被继承吗?

我可以防止sarima.for密谋吗?

在vim中,当我退出编辑模式时,是否可以防止插入符号移回?

可以防止在屏幕锁定或屏幕锁定期间关闭Wifi吗?

Vagrant虚拟机(Virtualbox)可以防止意外关闭/重新启动吗?

当我的UI在MFC中获得关闭输入时,如何退出线程

LESS可以防止样式重复吗?

select() 可以防止 read() 被中断吗?

我可以防止我的构造函数参数与VBA实例冲突吗?

我可以防止创建具有特定名称的文件夹吗?

我可以防止将Leaflet地图平移到世界边缘吗?

我可以修改液晶显示器以防止其进入睡眠状态吗?

我可以防止嵌套的不赞成使用的方法调用引发警告吗?

我可以防止自动将字符串强制转换为XName吗?

我可以防止扩展导出到Objective-C的Swift标头吗?

我可以防止Rails将实例变量从控制器传递到视图吗?

具有丰富内容的 iOS 推送通知 - 我可以防止通知被点击吗?

当值设置为空时,我可以防止TStringlist删除键值对吗?