Итак, я пытаюсь создать кнопку, открывающую 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» повторно масштабирует выбранное изображение, чтобы оно соответствовало моему ярлыку.
Работает, починил
JFileChooser является частью системы графического интерфейса Swing, для SWT следует использовать FileDialog. Избегайте смешивания SWT и Swing, это вызовет у вас много проблем.
greg-449, я только что попробовал FileDialog, он лучше, чем FileChoser, но я не могу получить путь к выбранному объекту, есть ли исходный код, который вы можете мне прислать?
Метод FileDialog open возвращает путь к выбранному файлу. Также существуют методы getFileName() и getFileNames().




Мне удалось решить проблему включения-отключения, просто удалив все, что мешало работе оболочки:
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()
если он работает отлично, почему вы пытаетесь исправить ошибки ???