场景是,当选择了radiobutton时,我打开一个JFileChooser来选择一个DEDECTORY,其中应该是一些文件。 我试图显示错误消息,我想再次显示目录选择器。 这是代码(我在radiobutton更改时调用的函数):
private void JFileChooserOpen(java.awt.event.ActionEvent evt) {
fileChooser.setCurrentDirectory(new java.io.File("."));
fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Select a directory");
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fileChooser.setAcceptAllFileFilterUsed(false);
int result = fileChooser.showOpenDialog(fileChooser);
if (result == JFileChooser.APPROVE_OPTION) {
// here I'm calling a function that searches for specific files.
// true these files are found, false, they are not.
if (checkTheDir(fileChooser.getSelectedFile()))
{
// assigning the path to a label
thePath.setText(fileChooser.getSelectedFile().toString());
}
else
{
// file not found
JOptionPane.showMessageDialog(null, "File GuiRap not found!",
"Controlla meglio", JOptionPane.WARNING_MESSAGE);
// what should I do, here, to open again the file dialog window?
// here I'm calling again this function, but surely is not a good practice!
JFileChooserOpen(evt);
}
// cancel button changes a radiobutton
} else if (result == JFileChooser.CANCEL_OPTION) {
rbnParams.setSelected(true);
}
}
非常感谢! F。
答案 0 :(得分:5)
创建JFileChooser
时,覆盖其approveSelection
方法(documentation)。
JFileChooser fileChooser = new JFileChooser() {
@Override
public void approveSelection() {
// test your condition here
if (checkTheDir(getSelectedFile())
super.approveSelection();
else
JOptionPane.showMessageDialog(null, "File GuiRap not found!",
"Controlla meglio", JOptionPane.WARNING_MESSAGE);
}
}
这样,文件选择器不会关闭并重新打开,但会保持打开状态直到满足所需条件(或取消执行)。
此外,您应为parentComponent
提供JOptionPane
,而不是null
。
答案 1 :(得分:0)
在JFileChooser&周围使用do { } while
循环JOptionPane,而不是错误消息,显示消息,如"找不到必要的文件。你想选择一个不同的目录吗?",使用JOptionPane.YES_NO_OPTION
并在他们拒绝时退出
答案 2 :(得分:0)
尝试下一个:
private void JFileChooserOpen(java.awt.event.ActionEvent evt) {
fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Select a directory");
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
fileChooser.setAcceptAllFileFilterUsed(false);
boolean valid = false;
do {
fileChooser.setCurrentDirectory(new java.io.File("."));
if (fileChooser.showOpenDialog(fileChooser) == JFileChooser.APPROVE_OPTION) {
valid = checkTheDir(fileChooser.getSelectedFile());
if (valid) {
thePath.setText(fileChooser.getSelectedFile().toString());
} else {
JOptionPane.showMessageDialog(null, "File GuiRap not found!",
"Controlla meglio", JOptionPane.WARNING_MESSAGE);
}
} else {
rbnParams.setSelected(true);
valid = true;
}
} while(!valid);
}