2014-08-27 121 views
-2

我正在使用Java圖形界面(Swing,AWT)。我的應用程序中的數據輸入應該通過JFrame完成。事實上,我有10個實體需要10 JFrame。我使用了for循環,但JFrame似乎沒有等到數據輸入。Java GUI應用程序

我用Thread.sleep()但徒勞無功。任何幫助?

下面是我的一些代碼:

for (int i=0; i < VMnumber; i++) // VMnumber : number of virtual machines to instantiate 
{ 
    mips=0; 
    frame=new VMcaracteristics(); // VMcaracteristics is a JFrame to enter VMs caracteristics 
    frame.setVisible(true); 
    while (!VMcaracteristicsFlag) // Current frame is still open 
    { 
     Thread.sleep(100); 
    } // create a VM correspondent to the current frame 
    vm = new Vm(vmid, brokerId, mips, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared()); 
    vmlist.add(vm); 
} 
+2

我們可以得到一些代碼嗎?也許初始化和涉及循環的部分? – Mshnik 2014-08-27 18:04:50

+0

你嘗試了什麼?任何代碼示例? – 2014-08-27 18:05:04

+1

你正在尋找一個「提交」按鈕,或者是在檢測到配置發生任何變化的時候?我認爲現在不需要更多的代碼/細節來確定你想要發生什麼,以及目前發生了什麼。 – user2813274 2014-08-27 18:05:17

回答

5

您正在尋找JOptionPane

String data = JOptionPane.showInputDialog(
    null, //parent window 
    "Hi! Enter some data, please:", //text 
    "Input", //title 
    JOptionPane.PLAIN_MESSAGE //icon? 
); 

瀏覽文檔以查找符合您需求的最佳方法。

編輯: JOptionPane的實際塊,這樣你就可以循環:

String[] data = new String[10]; 
for(int i = 0; i < 10; i++) { 
    data[i] = JOptionPane.showXXX(...); 
} 
1

你的根本問題(在我心中)與其說是如何顯示10個窗口,一前一後,而是,如何以簡單直接的方式從用戶那裏獲取多位信息,無論是編碼人員還是用戶。如果你不願意向用戶扔一堆窗戶,那麼是的,使用J4v4的多個JOptionPanes解決方案(1+到他的答案)或模態JDialogs(其實JOptionPane實際上是一個變體)。如果您想要更好的用戶體驗,儘管考慮向用戶顯示所有輸入字段,可能是在多行JTable中或在保存在JScrollPane中的GridLayout容器中的多個JPanel中。如果您絕對需要依次顯示10個視圖,請考慮使用一個使用JPanel的CardLayout,然後依次顯示10個視圖「卡」JPanel。

而且,你永遠要打電話Thread.sleep(...)while (true) Swing事件線程上,因爲這將阻止這一重要線索,一個是需要所有的擺動拉絲和用戶交互,並會有效地把你的整個應用程序睡覺。