2014-08-27 89 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事件线程上,因为这将阻止这一重要线索,一个是需要所有的摆动拉丝和用户交互,并会有效地把你的整个应用程序睡觉。