gpt4 book ai didi

java - JFileChooser showSaveDialog 多次出现

转载 作者:行者123 更新时间:2023-12-01 11:54:43 29 4
gpt4 key购买 nike

祝大家有美好的一天。

我对 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,并重复此过程,我能够理解它所生成的模式:

第 1 次单击“导出结果”至 JFileChooser 1 次打开,第 2 次单击“导出结果”至 2 次打开 JFileChooser,第 3 次单击“导出结果”至 3 次打开 JFileChooser,依此类推。

如何使 JFileChooser 只打开一次?

提前谢谢你:)

最佳答案

每次按下 ExportButton 时,您都会将 ActionListener this 添加到 SaveButtonCSVFile

>
SaveButtonCSVFile.addActionListener(this);

因此,第一次按下 ExportButton 时,SaveButtonCSVFile 将有一个 ActionListener,第二次按下 ExportButton 时,将有两个,然后三个...很快...

这是我更喜欢创建自定义内部类并将我需要的所有组件添加到其中的原因之一。根据需要创建新实例(或维护可重复使用的单个引用)

关于java - JFileChooser showSaveDialog 多次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28534111/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com