如何在Swing应用程序中实现循环逻辑?

时间:2014-02-27 02:58:34

标签: java swing actionlistener invokeandwait

我的头衔有些神秘,但我无法想出一个明确的标题。

首先,两个代码片段建立一个参考点(希望我没有拼写错误):

使用Scanner输入

'''
Scanner sc = new Scanner(System.in);
for (int i=0; i<10; ++ i)  {
  System.out.print("Please input a value:");
  String answer = sc.next();
  // do something with this string
}  
...

使用JOptionPane输入:

...
for (int i=0; i<10; ++ i) {
   String answer = JOptionPane.showInputDialog("Please input a value");
   // do something with this string
{

因此,在上述示例中,我们要求用户输入固定次数的值。如何在 Swing 应用程序中实现相同类型的功能?

使用JFrame(作为其内容窗格)创建JPanel并将JLabel(带提示)和JTextField添加到此面板,我没有任何问题。我还可以为文本字段创建ActionListener ActionPerformed方法来检索值并对其进行处理。字符串处理不是一个长期运行的任务,所以我不相信我需要一个单独的工作线程。

由于我们无法强制用户执行任何操作,因此我计划使用javax.swing.Timer来确保及时响应。

我不明白的是如何实现循环或任何其他形式的控制以确保用户输入(并且程序检索)该值的确切次数。如何将这种逻辑注入事件驱动系统?

一旦我设置了GUI部件并提交了要在EDT上调用的实例,我似乎放弃了所有控制。

我是否最初提交文本字段时将setEditable设置为false,然后创建一个循环invokeAndWait Runnable以启用编辑(并将其禁用)在ActionPerformed)?

请指出我正确的方向。

1 个答案:

答案 0 :(得分:5)

这取决于你想要如何实现它......

你可以......

提供所需数量的字段(在您的示例中为10)和JButton,以便在填写完所有字段之前,单击该按钮将仅向用户提供消息并重新关注无效字段场...

你可以......

为用户提供单个字段(和标签)和按钮。在他们填写该字段之前,按下按钮会提示他们并重新聚焦该字段。

当用户填写所需信息并点击按钮时,您递增一个计数器,重置该字段并继续,直到您的计数器达到其限制...

你可以......

使用只有一列和五行的JTable ...这是第一个解决方案的简化(取决于您的观点)解决方案......