我正在开发一个Java图形界面(Swing,AWT)。我的应用程序中的数据输入应该通过JFrame
完成。事实上,我有10个实体需要10 JFrame
s。我使用了for
循环但JFrame
似乎没有等到数据输入。
我使用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);
}
答案 0 :(得分: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 :(得分:1)
您的基本问题(在我看来)并不是如何一个接一个地显示10个窗口,而是如何以简单直接的方式从用户那里获取多个信息,这对您来说都是如此编码器和用户。如果你已经准备好向用户抛出一堆窗口,那么是的,使用J4v4的多个JOptionPanes解决方案(他的答案是1+),或模态JDialogs(其中JOptionPane实际上是一个变体)。如果您想要更好的用户体验,可以考虑向用户显示所有输入字段,可能在多行JTable中或在JScrollPane中保存的GridLayout容器中保存的多个JPanel中。如果您绝对需要按顺序显示10个视图,请考虑使用一个使用JPanel的CardLayout,然后显示10个视图&#34; card&#34; JPanels顺序。
此外,您永远不想在Swing事件线程上调用Thread.sleep(...)
或while (true)
,因为这会阻止这个重要的线程,这是所有Swing绘图和用户交互所需的线程,并且会有效地放置你的整个申请都要睡觉。