java - 等待用户输入 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 是一个自定义类,它创建一个文件选择器并设置要在单击浏览按钮时完成的事情
解决方案
当然,您将 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的工作)当然假设您已经将JFilePicker和FileTypeFilter类文件应用到您的项目中。没有它们,上面的代码将无法工作。
推荐阅读
- sql - 了解不同格式的坐标
- rx-java - rxjava中的重试缓冲区
- reactjs - 如何在 formik 表单中使用 useState 钩子
- angular - 如何在不使用路由的情况下更改鼠标悬停时的组件
- java - 如何从 Firebase 中取出存储的数据?
- javascript - 为什么 async/await 不等待节点的 http.get()?
- android - 如何注入实例而不是在构造函数中创建依赖项?
- postgresql - 大表上的可变日期过滤器太慢
- javascript - primeNG 下拉控件的样式问题
- php - SQLSTATE[HY000]: 一般错误: 933 OCIStmtExecute: ORA-00933: SQL 命令未正确结束 (ext\pdo_oci\oci_statement.c:148)