2012-04-07 61 views
0

我創建的程序的功能是讀取「n」.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

*「我有閱讀方法,但我遇到了加載更多相同文件的問題。」*您應該爲已打開的文件「翻轉到該選項卡」(或適用於GUI的任何內容)。同時考慮讓用戶一次打開一組文件 - 然後他們可以爲特定的UML圖選擇所有文件。當然,如果失敗了,你可能會使用自定義的[FileSystemView](http://docs.oracle.com/javase/7/docs/api/javax/swing/filechooser/FileSystemView.html)。 – 2012-04-07 14:09:45

+0

的確如此。我最大的問題是,我不知道用戶如何創建這種讀出方法是最好的。如果你允許一次選擇多個文件(=問題,但用戶友好),如果你允許相同的文件(我認爲這是好的,我不允許相同的文件)等 你可以有一個問題,可以在創建UML圖時發生?或者相反,添加到這種方法會有什麼好處? 謝謝你的想法。 – avalagne 2012-04-07 14:23:28

回答

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 2012-04-07 14:15:19

+0

我讀了那個頁面(class)。它看起來很有趣。我會盡量調整,但我認爲這對我來說太難了。如果它在我的想象中工作,那會很好。也許,但我也想要它:) – avalagne 2012-04-07 14:37:17

+0

對不起,我不知道如何使用這個類。我明白髮生了什麼(我希望)。我如何使用showOpenDialog之類的東西?謝謝。 – avalagne 2012-04-08 08:57:33