2011-04-15 33 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