0

我在 Netbeans IDE 中使用“自由设计”布局(管理器)来直观地创建一个带有按钮、文本框、复选框等的表单。这很容易;看起来很棒。当时我很开心。

两个按钮正是我想要的。一个 ["Browse..."] 打开一个FileChooser showOpenDialog,然后用所选目录填充其中一个文本框。EXIT 按钮也有效。我喜出望外。有一个第三个按钮可以让大事发生,但我对某些事情感到困惑,所以它被搁置了。

所以我将(不可编辑/锁定的)代码复制到一个名为 GUIform.java 的文件中(这样我就可以编辑它)。表单将按上述方式显示和工作。“主”文件 (Search.java) 如下所示:

package guiform; // This line also appears in GUIform.java.

public class Search  {

  public static void main(String[] args)  {
    java.awt.EventQueue.invokeLater
    (new Runnable()
    {
        @Override
        public void run()
        {
          GUIform myGUI = new GUIform();
          System.out.println("X");
        }
    }
    );
  }
}

该文件曾经由方法主体中的package, class, mainGUIform和行组成。在表单被“解雇”之前执行。有点困惑的研究让我添加了和东西,但没有任何改变。printlnrunprintlninvokeLaterRunnable

我的问题是,“我如何main等待用户提交表单? ”在这种情况发生之前不会发生任何好事,如果println在表单甚至有时间显示之前完成它的事情,那么更大的计划将不会奏效,因为表单输入是必需的。

(这似乎是一个最基本的情况,但我的两篇文章总共有近 2000 页,而且大多数例子都很稀疏。)

4

1 回答 1

0

有用。我在 GUIform.java 中添加了代码来捕捉鼠标点击,并且 SEARCH 按钮对用户输入的基于 Windows 的文件名模式(我将其转换为正则表达式)做了它应该做的事情。

这里主要:

package guiform;
import java.awt.event.ActionEvent;
public class Search  {

  public static void main(String[] args)  {

    GUIform myGUI = new GUIform() {

      @Override
      public void actionPerformed(ActionEvent e) {
      }
    };    
  }
}

这是对 GUI 最重要的补充,即搜索按钮的代码,我主要从表单创建工具生成的代码中收集到这些代码:

  private void jbSearchActionPerformed(ActionEvent evt) {                                         
    EventQueue.invokeLater
    (new Runnable()
    {
        @Override
        public void run()
        {

          FileVisitor visitor = new FileVisitor();

          try {
                Path startPath = Paths.get(GUIform.getjtRootNode());
                Files.walkFileTree(startPath, visitor);
          }
          catch (IOException ex) {
            System.out.println("Sh00t!!" + ex);
          }
        }
    }
    );

  }                                        

我刚刚从“Java all-in-one for Dummies”中学到的是,事实上,任何基于 GUI 的应用程序都必须至少有两个线程。直到那时我才意识到,我终于做到了,感觉就像是痛苦的反复试验,这开始变得完美[-ish]有意义。

于 2013-09-29T00:53:39.873 回答