2012-03-16 3 views
0

JFileChoosershowSaveDialoge()setSelectionMode(JfileChooser.DIRECTORIES_ONLY)을 사용하여 미리 선택된 파일이 저장되는 위치와 호출 대상을 설정합니다.JFileChooser로 저장

사용자가 새 버전의 이름을 선택할 수 있기를 원합니다. 어떻게해야합니까? 나는 또한 기본 이름을 선택하고 싶다.

+1

질문을 문장으로 나누어보십시오. –

+1

약간의 질문을 통해 질문에 대한 답변을 얻을 수 있습니다. http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html#fileview –

+1

마감일 인 경우 숙제라고 생각됩니다. ? 그렇다면 태그를 붙일 수 있습니다. – Jochen

답변

12

나는 귀하의 질문에 요구 사항을 인라인으로 구현 아래의 코드를 바랍니다. 질문의 기준은 코드 주석에서 응답합니다. 설명이 필요하면 알려주십시오.

import java.awt.BorderLayout; 
import java.awt.Insets; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.beans.PropertyChangeEvent; 
import java.beans.PropertyChangeListener; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 

import javax.swing.JButton; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 
import javax.swing.event.DocumentEvent; 
import javax.swing.event.DocumentListener; 

public class MyFileChooser extends JPanel implements ActionListener 
{ 
    JButton saveButton; 
    JTextArea content; 
    JFileChooser jfc; 

    private boolean docUpdate = false; 
    private String default_filename = "default.txt"; 
    private String default_directory = "/home/foo/workspace"; 
    private int version = 0; 

    public MyFileChooser() 
    { 
     super(new BorderLayout()); 

     content = new JTextArea(5, 20); 
     content.setMargin(new Insets(5, 5, 5, 5)); 
     content.getDocument().addDocumentListener(new DocumentListener() 
     { 

      @Override 
      public void removeUpdate(DocumentEvent e) 
      { 
       System.out.println("remove update"); 
       docUpdate = true;    
      } 

      @Override 
      public void insertUpdate(DocumentEvent e) 
      { 
       System.out.println("insert update"); 
       docUpdate = true; 
      } 

      @Override 
      public void changedUpdate(DocumentEvent e) 
      { 
       System.out.println("changed update"); 
       docUpdate = true;    
      } 
     }); 
     JScrollPane logScrollPane = new JScrollPane(content); 

     jfc = new JFileChooser(); 

     /** 
     * Set a initial default directory and a initial default filename here. 
     */ 
     //fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     jfc.setCurrentDirectory(new File(default_directory)); 
     jfc.setSelectedFile(new File(default_filename)); 
     jfc.addPropertyChangeListener(new PropertyChangeListener() { 

      @Override 
      public void propertyChange(PropertyChangeEvent evt) 
      {    
       if (docUpdate == true) 
       { 
        /** 
        * User can use the suggested filename or remove the suggested, 
        * and enter a new filename. 
        * Here, we set to a new directory and of cause, user can select 
        * what is the directory he want. 
        */ 
        jfc.setCurrentDirectory(new File("/home/foo")); 
        jfc.setSelectedFile(new File("default" + version + ".txt")); 
       }    
      } 
     }); 

     saveButton = new JButton("Save a File..."); 
     saveButton.addActionListener(this); 

     JPanel buttonPanel = new JPanel(); 
     buttonPanel.add(saveButton); 

     add(buttonPanel, BorderLayout.PAGE_START); 
     add(logScrollPane, BorderLayout.CENTER);   
    } 

    @Override 
    public void actionPerformed(ActionEvent e) 
    { 

     int returnVal = jfc.showSaveDialog(MyFileChooser.this); 
     if (returnVal == JFileChooser.APPROVE_OPTION) 
     { 
      File file = jfc.getSelectedFile(); 
      // save the file. 
      BufferedWriter bw; 
      try { 
       bw = new BufferedWriter(new FileWriter(file)); 
       bw.write(content.getText()); 
       bw.flush(); 
      }    
      catch (IOException e1) 
      { 
       e1.printStackTrace(); 
      } 
      version++; 

     } 
     else 
     { 
      System.out.println("Save command cancelled by user. "); 
     } 
     content.setCaretPosition(content.getDocument().getLength()); 

    } 

    private static void createAndShowGUI() 
    {  
     JFrame frame = new JFrame("FileChooserDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame.add(new MyFileChooser()); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 

      @Override 
      public void run() 
      { 
       createAndShowGUI();    
      } 
     }); 
    } 

} 
+4

정말요? 코드를 작성해도 downvote가됩니까? – Jasonw

1

예, 가능합니다. 외관상으로는 각 디렉토리를 변경 한 후에 속성 변경 리스너를 사용하여 기본 파일 이름을 설정해야합니다.

: 당신은 또한 여기에

이 프로퍼티 변경 리스너 부분에 대한 몇 가지 코드 (당신이 그 (것)들을 특정 경로에서 파일 이름을 선택하려면) 당신이 showSaveDialog를 (사용하고 있는지 확인) 및 디렉토리 만 선택 모드를 해제 할 것
// create a new FileChooser 
chooser = new JFileChooser(); 

String defaultFileName = "del.txt" 

// add listener to filter changes 
chooser.addPropertyChangeListener(JFileChooser.DIRECTORY_CHANGED_PROPERTY, 
new PropertyChangeListener() { 
    public void propertyChange(PropertyChangeEvent evt) { 

     chooser.setSelectedFile(
      new File(chooser.getCurrentDirectory().getAbsolutePath() + 
       "\\" + defaultFileName)); 


     chooser.updateUI(); 

    } 
}); 

이 코드는 여기의 예제입니다 : http://www.codeguru.com/forum/archive/index.php/t-38894.html

+0

-1 (응용 프로그램 코드에서 사용하지 않음) – kleopatra

1

대화 상자를 확장 및 버전 (JComboBox에)에 대한 항목처럼 필요한 구성 요소를 추가, 기본 이름을 설정 기본 파일 이름 필드 (JTextField를)를하고 확인을 누르면에, 모든 구성 요소 선택 값을 가져오고 당신의 요구를 저장하십시오.

관련 문제