Дождитесь ввода пользователя Java Swing - PullRequest
0 голосов
/ 17 марта 2020

Я использую JAVA Swing для создания базового c пользовательского интерфейса. Когда я запускаю программу, откроется окно с сообщением и кнопкой просмотра (используя для этого рамку и JButtons). При нажатии кнопки обзора откроется другое окно для перехода к файлу. Этого я достиг, вызвав FileChooser для события click кнопки Browse. Тем не менее, моя программа не ждет ввода пользователя. Открывается первое окно с кнопкой обзора, и программа продолжает выполняться и заканчивается ошибкой, поскольку ни один файл не был выбран. Как мне остановить выполнение, пока не будет введен пользовательский ввод? На форуме было рекомендовано использовать метод браузера 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 - это пользовательский класс, который создает средство выбора файлов и задает действия, которые необходимо выполнить при нажатии кнопки Обзор

1 Ответ

1 голос
/ 17 марта 2020

Конечно, вы устанавливаете JFrame видимым в конце его инициализации. Это необходимо сделать в методе main () вашего класса запуска. Где ваш?

JFilePicker (созданный: Нам Ха Минь ) применяется к JFrame как Java Компонент в чтобы сэкономить немного времени на GUI разработке. Лично я бы просто использовал JFileChooser непосредственно в событии JButton ActionPerformed . Если бы вы правильно следовали инструкциям, то увидели бы, что вам нужен метод main () , который имеет смысл. Класс запуска вашего приложения должен выглядеть примерно так:

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);
            }
        });
    }

}

Приведенный выше код (который является работой Нам Ха Минь ), конечно, предполагает, что вы уже применили Файлы JFilePicker и FileTypeFilter для вашего проекта. Без них приведенный выше код не будет работать.

...