Java实现文件开启器

Java实现文件开启器,java,image,label,swt,Java,Image,Label,Swt,因此,我试图制作一个按钮,在其中打开一个文件选择器来导入图像 我的问题是: 1-我希望fileChoser仅显示图像文件(.jpg…) 2-当FileOpener打开时,应禁用其他窗口,直到 文件开启器已释放。在我的例子中,它们是禁用的,但是当我点击它们时,我的程序由于某种原因崩溃了 3-如果有更好的文件开启器,它将受到欢迎,这不是我的,我在网上找到的 以下是我的源代码: public class FileOpener { private JFileChooser file_chooser =

因此,我试图制作一个按钮,在其中打开一个文件选择器来导入图像

我的问题是:

1-我希望fileChoser仅显示图像文件(.jpg…)

2-当FileOpener打开时,应禁用其他窗口,直到 文件开启器已释放。在我的例子中,它们是禁用的,但是当我点击它们时,我的程序由于某种原因崩溃了

3-如果有更好的文件开启器,它将受到欢迎,这不是我的,我在网上找到的

以下是我的源代码:

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

这是我的电话(这里有一个问题是启用禁用窗口):


请注意,这段代码是有效的,但我只是在尝试修复bug,“ScaleImage”功能会重新缩放所选图像以适应我的标签。

我只需删除所有干扰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()

如果它工作得很好,为什么您要尝试修复这些bug???它工作得很好,我修复了它JFileChooser是Swing GUI系统的一部分,对于SWT,您应该使用
FileDialog
。避免混合使用SWT和Swing它会给您带来很多问题。greg-449,我刚刚尝试了FileDialog,它比FileChoser更好,但是我无法获取所选对象的路径,是否有可以发送给我的源代码?FileDialog
open
方法返回所选文件的路径。还有
getFileName()
getFileNames()
方法。
 test.getFilterPath()+"\\"+test.getFileName()