大家好日子。
我对JFileChooser的showSaveDialog有疑问。
此段代码用于导出CSV文件并将其转换为(.XLS)文件。这是我的代码的一部分:
在执行期间,每当我单击ExportButton,打开JFileChooser,我就可以选择保存转换后文件的目录。选择后,JFileChooser旁边的JTextField将获得保存文件的所需位置。
编辑:代码已修复!谢谢你的帮助! :)
else if(e.getSource() == ExportButton){
JPanel panel = new JPanel(new GridLayout(0, 2));
fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
selection5 = new JTextField(20);
selection5.setDocument(new JTextFieldLimit(200));
selection5.setText("");
panel.add(SaveButtonCSVFile);
panel.add(selection5);
boolean panelChecker = false;
while(panelChecker == false){
int result = JOptionPane.showConfirmDialog(null, panel, "Quesion",JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
switch (result) {
case JOptionPane.OK_OPTION:
if(selection5.getText().trim().length() == 0){
JOptionPane.showMessageDialog(this, "Please input valid filename");
selection5.setText("");
}
else{
if(selection5.getText().trim().contains(".xls")){
panelChecker = true;
exportFilename = selection5.getText().trim();
....(other code)
exportFilename = null;
selection5.setText("");
}
else{
JOptionPane.showMessageDialog(this, "Please append .xls to your filename");
}
}
break;
case JOptionPane.CANCEL_OPTION:
panelChecker = true;
break;
}
}
}
else if (e.getSource() == SaveButtonCSVFile) {
int returnVal = fc.showSaveDialog(DataUI.this);
String temp = selection5.getText().trim();
if (returnVal == JFileChooser.APPROVE_OPTION) {
selection5.setText("");
File file = fc.getSelectedFile();
String suffix = ".xls";
if(file.getAbsolutePath().contains(".xls")){
suffix = "";
}
selection5.setText(file.getAbsolutePath() + suffix);
} else {
selection5.setText(temp);
}
}
我的问题是,如果我再次单击ExportButton导出我的数据,它会再次打开JFileChooser,并重复此过程,我能够理解它所形成的模式:
第一次点击导出结果到JFileChooser打开1次,第二次点击导出结果到JFileChooser打开2次,第三次点击导出结果到JFileChooser打开3次,依此类推。
如何让JFileChooser只打开一次?
提前谢谢你:)
答案 0 :(得分:1)
每次按ActionListener
this
SaveButtonCSVFile
添加到ExportButton
SaveButtonCSVFile.addActionListener(this);
因此,第一次按ExportButton
,SaveButtonCSVFile
将有一个ActionListener
,第二次,它会有两个,然后是三个......很快就会...
这是我更喜欢创建自定义内部类的原因之一,其中包含我需要添加的所有组件。根据需要创建新实例(或维护可以重复使用的单个引用)