2012-04-07 1 views
0

Я создаю программу, функция которой заключается в том, что чтение «.txt» или .java-файлов и этих файлов создает UML-диаграмму. У меня есть метод чтения, но я столкнулся с проблемой загрузки более одинаковых файлов. Я хотел бы отказаться от загрузки одинаковых файлов, потому что это создает проблемы с созданием UML-диаграммы.Как отменить выбор того же файла с помощью JFileChooser

Я пытаюсь решить эту проблему, чтобы сохранить загруженный файл в ArrayList и проверить каждый файл нагрузки на файлы, сохраненные в ArrayList, где находятся предыдущие загруженные файлы.

Следующая проблема заключается в том, что я нажимаю кнопку «Да» или «Нет», когда я выбираю один и тот же файл, файл одинаково загружен.

И когда я создаю этот ответ, я нашел следующую проблему. Когда пользователь выбирает более одного файла, ArrayList не знает, как добавить сразу два файла.

Есть ли какой-либо вариант, как я мог бы решить эту проблему более легко?

ArrayList<String> filenames = new ArrayList<String>(); 
JTabbedPane tabbedPaneUML_Files = new JTabbedPane(); 

private void readFiles() { 
    JFileChooser fc = new JFileChooser(); 
    fc.setMultiSelectionEnabled(true); 
    FileNameExtensionFilter fileFilter = 
      new FileNameExtensionFilter("Only .txt a .java files", 
      "txt", "java"); 
    fc.setFileFilter(fileFilter); 
    int returnValue = fc.showOpenDialog(this);   

    if (returnValue == JFileChooser.APPROVE_OPTION) { 
     File[] files = fc.getSelectedFiles(); 
     File file;    
     tabbedPaneUML_Files.addTab("UML diagram", panelUML); 

     for (int i = 0; i < files.length; i++) { 
      file = files[i]; 

      for (int j = 0; j < filenames.size(); j++) { 
       if (filenames.get(i).equals(fc.getSelectedFile().getName())) { 
        Object[] options = {"Yes", "No"}; 

        int answer = JOptionPane.showOptionDialog(this, 
          "Unable to load the same files! To retrieve the other files?", 
          "Load new file", JOptionPane.YES_NO_OPTION, 
          JOptionPane.WARNING_MESSAGE, null, options, options[0]);  

        if(answer == 0) { 
         readFiles(); 
        } 
       } 
      }   
      filenames.add(file.getName()); 
      JTextArea loadCode = new JTextArea(); 
      JScrollPane scrollingFile = new JScrollPane(); 
      scrollingFile.setViewportView(loadCode); 
      tabbedPaneUML_Files.addTab("" + file.getName(), scrollingFile); 
      int ch; 

      try { 
       Reader charsReader = 
         new InputStreamReader(new FileInputStream(file), 
         "UTF-8"); 

       while ((ch = charsReader.read()) != -1) { 
        loadCode.append(Character.toString((char) ch)); 
       } 
       loadCode.setSelectionStart(0); 
       loadCode.setSelectionEnd(0); 
       loadCode.setEditable(false); 
      } catch (FileNotFoundException ex) { 
       Logger.getLogger(HlavniOkno.class.getName()).log(Level.SEVERE, null, ex); 
      } catch (IOException ex) { 
       Logger.getLogger(HlavniOkno.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    } 
} 

Благодарим за любые советы. Я уже потерял идеи. Извините за мой английский.

+0

* «У меня есть метод чтения, но я столкнулся с проблемой загрузки более одного файла». * Вы должны просто «перевернуть на эту вкладку» (или что-то подходящее для графического интерфейса) для уже открытого файла. Также подумайте о том, чтобы предложить пользователю открыть группу файлов сразу - тогда они могут выбрать все файлы для конкретной диаграммы UML. Конечно, в противном случае вы можете использовать пользовательский [FileSystemView] (http://docs.oracle.com/javase/7/docs/api/javax/swing/filechooser/FileSystemView.html). –

+0

Это правда. Моя самая большая проблема заключается в том, что я не знаю, как было бы лучше для пользователей создать этот метод чтения. Если вы разрешаете одновременно выбирать несколько файлов (= проблемы, но удобны для пользователя), если вы разрешаете один и тот же файл (я думаю, хорошо, что я не разрешаю один и тот же файл) и т. Д. У вас может быть проблема, которая могла бы возникают при создании диаграммы UML? Или, наоборот, что было бы неплохо добавить к этому методу? Спасибо за ваши идеи. – avalagne

ответ

1

Вы можете использовать validatedFileChooser нашел here

и настроить его таким образом, вместо того, чтобы иметь список недопустимых имен файлов, есть список уже выбранных файлов. Тогда вы можете просто изменить эту часть:

if (file.exists() && getDialogType() == SAVE_DIALOG) { 
int confirm = JOptionPane.showConfirmDialog(this, file.getName() + " already exists! Would you like to overwrite it?", "File already exists", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); 
if (confirm != JOptionPane.YES_OPTION) 
return; 
} 

сказать getDialogType() == LOAD_DIALOG и сообщение об ошибке в: «файл уже загружен», например.

Что касается нескольких имен файлов, сделайте File[] files = chooser.getSelectedFiles();, чтобы получить список выбранных файлов, перебрать их, чтобы получить их имена, а затем сохранить их в массиве для уже выбранных имен файлов.

Редактировать - извините, что вы уже сделали File[] files = chooser.getSelectedFiles();, поэтому все, что вам нужно сделать, это добавить его в массив, содержащий уже загруженные имена файлов.

+0

Благодарим вас за ответ. Я смотрю на эту страницу. – avalagne

+0

Я прочитал эту страницу (класс). Это выглядит интересно. Я попытаюсь настроить, но я думаю, что это слишком сложно для меня. Было бы неплохо, если бы это сработало в моем воображении. Может, но я тоже этого хочу :) – avalagne

+0

Извините, я не знаю, как использовать класс. Я понимаю, что происходит (надеюсь). Как я использую что-то вроде showOpenDialog? Спасибо. – avalagne