Java, реализующая fileopener

Итак, я пытаюсь создать кнопку, открывающую FileChoser для импорта изображения.

Моя проблема:

1-Я хочу, чтобы fileChoser отображал только файлы изображений (.jpg ...).

2-Когда открывается FileOpener, другие окна должны быть отключены до тех пор, пока FileOpener удален. В моем случае они отключены, но когда я нажимаю на них, моя программа по какой-то причине вылетает.

3-Если есть лучший FileOpener, он будет приветствоваться, это не мое, я нашел его в сети.

Вот мой исходный код:

public class FileOpener {

private JFileChooser file_chooser = new JFileChooser();
StringBuilder path = new StringBuilder();

public File choosed() {
    File file = null;
    if(file_chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
        file = file_chooser.getSelectedFile();
        Scanner input = null;
        try {
            input = new Scanner(file);
        } catch (FileNotFoundException e) {

            System.out.println("Fail");
            e.printStackTrace();;
        }

        while(input.hasNext()) {
            path.append(input.nextLine());
        }
        input.close();
    }

    return file;
}

public String getPath() {
    return path.toString();
}

}

И вот мой призыв (где есть проблема - это окно включения-выключения):

Button button_2 = new Button(composite_1, SWT.FLAT);
    button_2.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            shell.setEnabled(false);
            FileOpener v = new FileOpener();
            File file = v.choosed();
            if(file != null) {
                Image image = new Image(shell.getDisplay(), file.getPath());
                Image image2 = main.ScaleImage(image, Image_input);
                Image_input.setImage(image2);
            }

            shell.setEnabled(true);
        }
    });

Обратите внимание, что этот код работает, но я пытаюсь просто исправить ошибки, функция «ScaleImage» повторно масштабирует выбранное изображение, чтобы оно соответствовало моему ярлыку.

если он работает отлично, почему вы пытаетесь исправить ошибки ???

gpasch 13.09.2018 20:14

Работает, починил

Med-Amine Benyettou 13.09.2018 20:14

JFileChooser является частью системы графического интерфейса Swing, для SWT следует использовать FileDialog. Избегайте смешивания SWT и Swing, это вызовет у вас много проблем.

greg-449 13.09.2018 20:19

greg-449, я только что попробовал FileDialog, он лучше, чем FileChoser, но я не могу получить путь к выбранному объекту, есть ли исходный код, который вы можете мне прислать?

Med-Amine Benyettou 13.09.2018 20:52

Метод FileDialog open возвращает путь к выбранному файлу. Также существуют методы getFileName() и getFileNames().

greg-449 13.09.2018 20:56
1
5
128
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне удалось решить проблему включения-отключения, просто удалив все, что мешало работе оболочки:

Button button_2 = new Button(composite_1, SWT.FLAT);
    button_2.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {

            FileOpener v = new FileOpener();
            File file = v.choosed();
            shell.forceActive();
            if(file != null) {
                Image image = new Image(shell.getDisplay(), file.getPath());
                Image image2 = main.ScaleImage(image, Image_input);
                Image_input.setImage(image2);
            }


        }
    });

Я полностью исправил свою проблему с помощью FileDialog:

Button button_2 = new Button(composite_1, SWT.FLAT);
    button_2.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {

            FileDialog test = new FileDialog(shell);
            test.open();

            File file = new File(test.getFilterPath()+"\\"+test.getFileName());
            if(file != null) {
                Image image = new Image(shell.getDisplay(), file.getPath());
                Image image2 = main.ScaleImage(image, Image_input);
                Image_input.setImage(image2);
            }


        }
    });

Спасибо greg-449 за ответ. Я не знал, как точно работать с новым графическим интерфейсом, но как получить путь к файлу:

 test.getFilterPath()+"\\"+test.getFileName()

Другие вопросы по теме