Java 实施 FileOpener
Java implementing a FileOpener
所以我想制作一个按钮,用于打开 FileChoser 以导入图像。
我的问题是:
1-我希望 fileChoser 仅显示图像文件 (.jpg ...)。
2-当 FileOpener 打开时,另一个 windows 应该被禁用,直到
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();
}
}
这是我的电话(有问题的是启用-禁用 window):
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" 功能重新缩放所选图像以适合我的标签。
我设法简单地通过删除所有干扰 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()
所以我想制作一个按钮,用于打开 FileChoser 以导入图像。
我的问题是:
1-我希望 fileChoser 仅显示图像文件 (.jpg ...)。
2-当 FileOpener 打开时,另一个 windows 应该被禁用,直到 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();
}
}
这是我的电话(有问题的是启用-禁用 window):
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" 功能重新缩放所选图像以适合我的标签。
我设法简单地通过删除所有干扰 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()