2012-04-07 4 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)를 사용할 수도 있습니다. –

+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

관련 문제