首页 > 解决方案 > 等待用户输入 Java Swing

问题描述

我正在使用 JAVA Swing 创建一个非常基本的 UI。当我运行程序时,将打开一个带有消息和浏览按钮的窗口(同样使用框架和 JButtons)。单击浏览按钮后,将打开另一个窗口以导航到该文件。我通过在浏览按钮的单击事件上调用 FileChooser 来实现这一点。但是,我的程序不等待用户输入。带有浏览按钮的第一个窗口打开,程序继续执行,由于没有选择文件而导致错误。如何在提供用户输入之前停止执行?在一个论坛中,建议使用浏览器的 showOpenDialog() 方法,但这会直接打开一个浏览窗口,而我想为用户提供点击浏览按钮browsewindow 选择文件窗口的功能

我的代码如下

    frame.setLayout(new FlowLayout());
    // set up a file picker component
    JFilePicker filePicker = new JFilePicker("Pick a file", "Browse...");
    filePicker.setMode(JFilePicker.MODE_OPEN);
    filePicker.addFileTypeFilter(".jpg", "JPEG Images");
    filePicker.addFileTypeFilter(".mp4", "MPEG-4 Videos");

    // access JFileChooser class directly
    JFileChooser fileChooser = filePicker.getFileChooser();
    fileChooser.setCurrentDirectory(new File("C:/"));
    // add the component to the frame
    frame.add(filePicker);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(520, 100);
    frame.setLocationRelativeTo(null);    // center on screen
    frame.setVisible(true);
    System.out.println();

JPicker 是一个自定义类,它创建一个文件选择器并设置要在单击浏览按钮时完成的事情

标签: javaswing

解决方案


当然,您将 JFrame 设置为在其初始化结束时可见。您需要在启动类的main()方法中执行此操作。你的在哪里?

JFilePicker (由 Nam Ha Minh创建)作为 Java 组件应用于 JFrame,以便在 GUI 开发中节省一点时间。我个人只会在 JButton ActionPerformed事件中直接使用 JFileChooser。如果您正确地遵循了指示,那么您会发现您需要一个有意义的main()方法。您的应用程序 Startup 类应该是这样的:

import java.awt.FlowLayout;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class TestJFilePicker extends JFrame {

    private static final long serialVersionUID = 1L;

    public TestJFilePicker() {
        super("Test using JFilePicker");

        setLayout(new FlowLayout());

        // set up a file picker component
        JFilePicker filePicker = new JFilePicker("Pick a file", "Browse...");
        filePicker.setMode(JFilePicker.MODE_OPEN);
        filePicker.addFileTypeFilter(".jpg", "JPEG Images");
        filePicker.addFileTypeFilter(".mp4", "MPEG-4 Videos");

        // access JFileChooser class directly
        JFileChooser fileChooser = filePicker.getFileChooser();
        fileChooser.setCurrentDirectory(new File("D:/"));

        // add the component to the frame
        add(filePicker);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(520, 100);
        setLocationRelativeTo(null);    // center on screen
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TestJFilePicker().setVisible(true);
            }
        });
    }

}

上面的代码(这是Nam Ha Minh的工作)当然假设您已经将JFilePickerFileTypeFilter类文件应用到您的项目中。没有它们,上面的代码将无法工作。


推荐阅读