2009-12-06 86 views
0

我有一個GUI程序,需要打開一個單獨的窗口並等待用戶選擇並選擇,然後繼續。我想我應該用wait()和notify()方法來做這件事,但我仍然試圖弄清楚如何使用這些。一個複雜的因素是,當第二個窗口在actionPerformed()方法中創建時,情況似乎有所不同。如何暫停程序的執行,直到在Java Swing中單擊按鈕爲止

以下是我認爲它應該是在這裏完成,顯然這是不完全正確......

這應該創建一個窗口有一個按鈕,當按下按鈕時,應創建一個按鈕,另一個窗口,當按下該按鈕時,程序應打印「結束」。

import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 

public class WtfExample { 

public static void main(String[] args) { 
    JFrame jf = new JFrame(); 
    JButton butt = new JButton("Button"); 
    butt.addActionListener(new ActionListener() { 

    public void actionPerformed(ActionEvent e) { 
    WtfExample we = new WtfExample(); 
    we.display(); 
    } 
    }); 

    jf.getContentPane().add(butt); 
    jf.setSize(new Dimension(1000, 500)); 
    jf.setVisible(true); 

    System.out.println("End"); 
} 

public synchronized void display() { 
    JFrame jf = new JFrame(); 

    JButton butt = new JButton("Button"); 
    butt.addActionListener(new ActionListener() { 

    public void actionPerformed(ActionEvent e) { 
    synchronized(WtfExample.this) { 
    WtfExample.this.notifyAll(); 
    } 
    } 
    }); 

    jf.getContentPane().add(butt); 
    jf.setSize(new Dimension(1000, 500)); 
    jf.setVisible(true); 

    while(true) { 
    try { 
    this.wait(); 
    } catch (InterruptedException e) { 
    e.printStackTrace(); 
    break; 
    } 
    } 
} 
} 

編輯 - 我不是一個東西─多數民衆贊成打開第​​二個窗口是空白的,喜歡它的成分從來沒有加入得很清楚。無論是框架還是對話框,情況都是如此,但只有在窗口是從actionPerformed方法創建時纔會發生。

+2

爲什麼社區wiki ..? – Bozho 2009-12-06 22:45:24

+1

換句話說 - 不要將你的問題發佈爲社區wiki,除非你有理由 - http://meta.stackexchange.com/questions/11740/what-are-community-wiki-posts-on-堆棧溢出在這裏你可以找到'社區wiki'的描述 – Bozho 2009-12-06 23:04:57

回答

4

不,你應該只是使用JDialog

+0

這沒有什麼區別,我不認爲這是問題在這裏,問題是等待和通知業務。 – 2009-12-06 22:59:32

+0

等待並通知與此無關。這不是一個同步和多線程問題。 – Bozho 2009-12-06 23:02:47

+0

那麼如何讓程序在點擊按鈕後繼續執行? – 2009-12-06 23:04:28

2

您需要一個模態對話窗口。 Here是對話框的教程。對於簡單的情況使用JOptionPane更容易。

對話框可以是模態的。當模態對話框可見時,它將阻止用戶輸入到程序中的所有其他窗口。
+0

不管我使用Dialog還是Frame,似乎都沒有什麼區別,但是我可能應該使用Dialog來處理它,因爲這似乎更符合我的正在使用它。 – 2009-12-06 23:02:47

0

由於另外兩個答案建議您需要一個模態JDialog。你不需要處理任何線程類。 JDialog窗口將處理用戶輸入處理後的控制權。有幾種方法可以設置對話框模態。這裏有兩個例子。

new JDialog(Dialog owner, boolean modal) 

new JDialog(Dialog owner, String title, boolean modal) 

你也可以做這樣的事情:

JDialog dialog = new JDialog(owner); 
dialog.setModal(true); 

我覺得this是關於JAVA形態相當不錯的文章。

相關問題