JFileChooser
및 showSaveDialoge()
및 setSelectionMode(JfileChooser.DIRECTORIES_ONLY)
을 사용하여 미리 선택된 파일이 저장되는 위치와 호출 대상을 설정합니다.JFileChooser로 저장
사용자가 새 버전의 이름을 선택할 수 있기를 원합니다. 어떻게해야합니까? 나는 또한 기본 이름을 선택하고 싶다.
JFileChooser
및 showSaveDialoge()
및 setSelectionMode(JfileChooser.DIRECTORIES_ONLY)
을 사용하여 미리 선택된 파일이 저장되는 위치와 호출 대상을 설정합니다.JFileChooser로 저장
사용자가 새 버전의 이름을 선택할 수 있기를 원합니다. 어떻게해야합니까? 나는 또한 기본 이름을 선택하고 싶다.
나는 귀하의 질문에 요구 사항을 인라인으로 구현 아래의 코드를 바랍니다. 질문의 기준은 코드 주석에서 응답합니다. 설명이 필요하면 알려주십시오.
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();
}
});
}
}
정말요? 코드를 작성해도 downvote가됩니까? – Jasonw
예, 가능합니다. 외관상으로는 각 디렉토리를 변경 한 후에 속성 변경 리스너를 사용하여 기본 파일 이름을 설정해야합니다.
: 당신은 또한 여기에 이 프로퍼티 변경 리스너 부분에 대한 몇 가지 코드 (당신이 그 (것)들을 특정 경로에서 파일 이름을 선택하려면) 당신이 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
-1 (응용 프로그램 코드에서 사용하지 않음) – kleopatra
대화 상자를 확장 및 버전 (JComboBox에)에 대한 항목처럼 필요한 구성 요소를 추가, 기본 이름을 설정 기본 파일 이름 필드 (JTextField를)를하고 확인을 누르면에, 모든 구성 요소 선택 값을 가져오고 당신의 요구를 저장하십시오.
질문을 문장으로 나누어보십시오. –
약간의 질문을 통해 질문에 대한 답변을 얻을 수 있습니다. http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html#fileview –
마감일 인 경우 숙제라고 생각됩니다. ? 그렇다면 태그를 붙일 수 있습니다. – Jochen