Java实现FileOpener

问题描述 投票:-1回答:1

所以我试图创建一个按钮,打开文件选择器来导入图像。

我的问题是:

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”功能会重新调整所选图像以适合我的标签。

java image label swt
1个回答
0
投票

我设法通过删除所有干扰shell的内容来修复启用 - 禁用问题:

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的答案。我不知道如何使用新的GUI来获取文件路径:

 test.getFilterPath()+"\\"+test.getFileName()
© www.soinside.com 2019 - 2024. All rights reserved.