[英]Saving with a JFileChooser
我正在使用JFileChooser
和showSaveDialoge()
和setSelectionMode(JfileChooser.DIRECTORIES_ONLY)
來設置將保存預選文件的位置以及該文件的名稱。
我希望用戶能夠選擇新版本的名稱以及放置位置。 我該怎么辦? 我也希望選擇一個默認名稱。
希望以下代碼符合您的問題要求。 您的問題中的條件在代碼注釋中得到回答。 如果您需要澄清,請告訴我。
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();
}
});
}
}
是的,可以這樣做。 顯然,您需要在每次目錄更改后使用屬性更改偵聽器來設置默認文件名。 您還需要確保使用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
擴展對話框並添加所需的組件,例如version(JComboBox)的條目,默認文件名字段(JTextField),在其中設置默認名稱,然后按OK,獲取所有選定組件的值,然后保存所需的組件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.