2011-04-15 77 views
7

我有一个组合框。在组合框中选择一个项目后,将打开新的JDialog。Swing组件和jdk版本问题

  1. 当我使用JDK 1.6_06,我能够在 的JDialog 点击按钮正常。
  2. 当我使用JDK 1.6_24, 然后我需要先点击 JDialog中的任何地方。然后只有点击 按钮的作品。首先我认为这个 是一个焦点问题。但是 组件可以与JDK 1.6_06正常工作。但是它仅在JDK 1.6_24中出现问题。

我试着谷歌它。但没有找到任何答案。有人有任何想法吗?

+0

您是否在同一个系统上使用两个JDK? (哪一个?)这看起来像一个窗口管理器问题。 – 2011-04-15 10:21:25

+0

(趁机从u23升级到u24 :-) - 但无法复制。一个小的可运行示例演示了这个问题呢? – kleopatra 2011-04-15 11:06:15

+2

任何发布SSCCE的机会? http://sscce.org/ – 2011-04-15 14:48:51

回答

0

@All:Aplogize for late reply。我正在尝试不同的场景。我发现这个问题与线程有关。看来组合框还没有完成它的工作,并打开jdialog。在组合框尝试完成其工作之后,焦点将丢失到父窗口。我试图在线程中打开对话框:

   new Thread() { 
        public void run() { 
         // open dialog here 
        } 
       }.start(); 

它工作正常。现在我打算使用SwingWorker打开对话框:

    SwingWorker worker = new SwingWorker() { 
       @Override 
       protected Object doInBackground() throws Exception { 
        // TODO Auto-generated method stub 
        // open dialog here 
        return null; 
       } 
       }; 

这也行得通。希望这是正确的方法。请让我知道,如果我做的是正确的事情。

+0

SwingWorker没有用于这个目的。你可以发布你如何打开对话框吗?它是否在组合框的侦听器中打开? – KDM 2011-04-19 15:32:35

1

我不知道Java版本 - 但把swing.setVisible(true)放入SwingUtilities#invokeLater为我解决了这个问题。因人而异。

+0

show()的使用已被弃用,更好的使用'setVisible(true)' – MByD 2011-04-15 10:31:52

+0

纠正它。谢谢。 – KDM 2011-04-15 11:07:10

+0

我试了一下,但没有为我工作:( – user613114 2011-04-19 14:12:20