Java JDialog的模态存在问题(主窗口的鼠标事件被触发和缓冲)

Java JDialog的模态存在问题(主窗口的鼠标事件被触发和缓冲),java,swing,events,modal-dialog,jcombobox,Java,Swing,Events,Modal Dialog,Jcombobox,我做了一个JDialog,这个模态大概工作得很好 dialog.setModalityType(JDialog.ModalityType.APPLICATION_MODAL); dialog.setVisible(true); 但我的问题是: 我在jcombobox.setSelection()之后抛出Jdialog,我需要在Accept按钮中单击两次以隐藏对话框,因为下拉式弹出窗口占用了关闭对话框的第一次单击。在调用对话框之前,我通过手动调用jcombobox.hidePopup()修复了

我做了一个JDialog,这个模态大概工作得很好

dialog.setModalityType(JDialog.ModalityType.APPLICATION_MODAL);
dialog.setVisible(true);
但我的问题是:

  • 我在jcombobox.setSelection()之后抛出Jdialog,我需要在Accept按钮中单击两次以隐藏对话框,因为下拉式弹出窗口占用了关闭对话框的第一次单击。在调用对话框之前,我通过手动调用jcombobox.hidePopup()修复了这个问题,但我无法理解后者是否是模态的,为什么鼠标事件会触发窗口外的事件`

  • 我的主窗口以某种方式缓冲鼠标事件,因此对于那些在绘制模式对话框时未激活的鼠标事件(如前一点所发生的),它们似乎得到缓冲,并在对话框关闭后应用。这是预期的行为吗

谢谢你

  • jcombobox.hidePopup(“没有意义”)
    替换为添加到
    jcombobox的
    ActionListener
    itemstener

  • 通过@camickr添加以正确设置
    FocusOwner

  • 为什么会有另一个
    鼠标侦听器
    ,可能是在向
    JComponents
    发送任何事件的情况下,您无法正确设置
    焦点

      • jcombobox.hidePopup(“没有意义”)
        替换为添加到
        jcombobox的
        ActionListener
        itemstener

      • 通过@camickr添加以正确设置
        FocusOwner

      • 为什么会有另一个
        鼠标侦听器
        ,可能是在向
        JComponents
        发送任何事件的情况下,您无法正确设置
        焦点


      非常抱歉,我没有正确理解第1点和第3点。第一个:用侦听器替换hidepopup?你的意思是取消听众的注册?(事实上,我已经做到了)。对于第三个,不是其他的MouseListener,是默认的组件(表格单元格)选择事件,它在关闭模式后得到执行。但是谢谢你的第二条。我真的很抱歉,我没有正确理解第1点和第3点。第一个:用侦听器替换hidepopup?你的意思是取消听众的注册?(事实上,我已经做到了)。对于第三个,不是其他的MouseListener,是默认的组件(表格单元格)选择事件,它在关闭模式后得到执行。但是感谢第二个示例,如果您通过在带有
      SwingUtilities.invokeLater(new Runnable(){…})的Runnable中调用它,在事件线程上对JDialog进行排队,从而延迟JDialog的显示,该怎么办
      ?如果您通过使用
      SwingUtilities.invokeLater(new Runnable(){…})在Runnable中调用JDialog,从而在事件线程上对其进行排队,从而延迟JDialog的显示,该怎么办?