Java, реализующая FileOpener - PullRequest
0 голосов
/ 13 сентября 2018

Поэтому я пытаюсь создать кнопку, в которой открывается 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" перемасштабирует выбранное изображение под мою метку.

1 Ответ

0 голосов
/ 13 сентября 2018

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

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()
...