Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在模态JDialog上忽略鼠标单击_Java_Swing_Modal Dialog_Jdialog - Fatal编程技术网

Java 在模态JDialog上忽略鼠标单击

Java 在模态JDialog上忽略鼠标单击,java,swing,modal-dialog,jdialog,Java,Swing,Modal Dialog,Jdialog,我很难理解模态JDialog的行为 当对话框设置为“可见”时,在用户单击用于启动该对话框的父JFrame之前,所有对话框都可以正常工作。尽管对话框仍如预期的那样位于顶部,但所有随后在JDialog上的鼠标单击都将被忽略。JDialog中的表单项仍然可以填充,但前提是使用tab导航。这是正常的还是我遗漏了一些明显的东西 下面是一个简单的示例,说明了该行为: 导入java.awt.BorderLayout; 导入java.awt.Dialog.ModalityType; 导入java.awt.Eve

我很难理解模态JDialog的行为

当对话框设置为“可见”时,在用户单击用于启动该对话框的父JFrame之前,所有对话框都可以正常工作。尽管对话框仍如预期的那样位于顶部,但所有随后在JDialog上的鼠标单击都将被忽略。JDialog中的表单项仍然可以填充,但前提是使用tab导航。这是正常的还是我遗漏了一些明显的东西

下面是一个简单的示例,说明了该行为:

导入java.awt.BorderLayout; 导入java.awt.Dialog.ModalityType; 导入java.awt.EventQueue; 导入java.awt.event.ActionEvent; 导入java.awt.event.ActionListener; 导入javax.swing.JButton; 导入javax.swing.JDialog; 导入javax.swing.JFrame; 导入javax.swing.JLabel; 导入javax.swing.JPanel; 导入javax.swing.JTextField; 公共类测试{ 私有JFrame; 公开测试pp{ frame=新JFrame; 机架立根100450300; frame.setDefaultCloseOperationJFrame.EXIT_ON_CLOSE; JButton btnRun=新JButtonrun; btnRun.AddActionListener新建ActionListener{ @凌驾 公共作废actionPerformedActionEvent arg0{ JDialog dialog=getChildDialog; dialog.setModalityTypeModalityType.APPLICATION_MODAL; dialog.setVisibletrue; } }; frame.getContentPane.addbtnRun,BorderLayout.CENTER; } 公共JDialog getChildDialog{ JDialog dialog=新建JDialog; dialog.setModalityTypeModalityType.APPLICATION_MODAL; dialog.setbounds10010450300; JPanel面板=新JPanel; panel.setLayout新建边框布局; panel.addnew JTextField,BorderLayout.CENTER; panel.addnew JTextField,BorderLayout.NORTH; panel.addnew JTextField,BorderLayout.SOUTH; panel.addnew JLabelBlah,BorderLayout.EAST; panel.addnew JLabelBlah,BorderLayout.WEST; dialog.getContentPane.setLayoutnew BorderLayout; dialog.getContentPane.addpanel,BorderLayout.CENTER; 返回对话框; } 公共静态无效字符串[]args{ EventQueue.invokeLaternew可运行{ 公开募捐{ 试一试{ TestApp窗口=新TestApp; window.frame.setVisibletrue; }捕获异常e{ e、 打印跟踪; } } }; } }
谢谢你的反馈。我想这一定是我使用的OpenJDK 2.4.7 7u55-2.4.7-1ubuntu1的JVM中的一个bug


我刚刚在WindowsJava7JVM上运行了相同的代码,但没有得到相同的行为。我将提交一份bug报告。

即使JDialog是一个JOptionPane,我也会看到同样的行为。因此,您可以通过使用JOptionPane.showInputDialognull替换getChildDialog来简化上述代码。Blahy您的示例代码在dialog.setModalityTypeModalityType.APPLICATION_ModelOrry@Rubinum的第27行抛出错误。它只是缺少一个导入语句。我从不推荐的setModel更改为setModalityType,但没有重新检查编译后的setModalityType。在Windows7上使用JDK7_60,代码对我来说运行良好。我唯一能建议的是在创建对话框时将框架指定为父级。我尝试了您的代码,我的单击在组件上工作,而不使用tab。我是错过了什么还是误解了?