2012-05-07 6 views
2

Я пытался справиться с некоторыми проблемами при создании своего приложения на основе Swing. У меня есть главный JFrame, который состоит из:JButton нужно щелкнуть дважды после JDialog

  1. JMenu
  2. JPanel, содержащие JButton и JLabel

JButton связан с ActionListener. Щелчок по JMenu (MenuListener) вызывает JDialog с некоторой формой. Проблема в том, что когда JDialog закрыт (не имеет значения, выполняю ли я его с помощью dispose() или, скорее, showVisible (false)). Мне нужно дважды щелкнуть JButton до того, как он будет запущен в первый раз. Теперь он работает с одним щелчком мыши.

Каждый раз, когда JDialog находится впереди, появляется проблема.

PS. JDialog установлен как модальный, а JFrame - как родительский.

+4

Я не уверен, как мы можем помочь вам на основе предоставленной информации. У вас есть ошибка в вашем коде, и вам нужно будет изолировать ее с помощью отладки, прежде чем мы сможем вам помочь. –

+3

Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –

ответ

3

Это звучит как проблема с фокусом.

Первый клик восстанавливает фокус приложения, а второй нажимает кнопку. Как правило, я видел это, когда JDialog имеет неправильный родительский элемент и фокус не может быть возвращен.

1

Благодарим за ответы.

Я рассмотрел размещение некоторого кода, но он включает в себя 4 класса, поэтому будет довольно длинным.

У меня также были проблемы с фокусом, но ничего не помогло. Что интересно: если я показываю JDialog на new myDialog.showVisible(true), он ведет себя так, как я описал. Но если я использую конструкцию так:

SwingUtilities.invokeLater(new Runnable() { 

     public void run() { 
      new JDialog.setVisible(true); 
     } 
    }); 

закрывается нормально и родительский фрейм не нужно быть нажата, прежде чем ответить, но с другой стороны, отображается диалог необходим так. Кроме того, то, что я не понимаю, после открытия курсора «Диалог» помещается в текстовое поле, и я могу писать нормально, но для того, чтобы щелкнуть какую-то кнопку на нем, я должен щелкнуть один раз на диалоге, только второй и следующий клики ведут себя так, как я хочу ,

PS. Закрытие диалога, как во втором включенном примере, ничего не меняет.

Смежные вопросы