Java 按下JFileChooser OK后如何不退出?
场景是,当选择一个单选按钮时,我打开一个JFileChooser来选择一个目录,其中应该有一些文件。 我试图显示一条错误消息,我想再次显示目录选择器。 这是代码(当radiobutton更改时我调用的函数): 非常感谢!Java 按下JFileChooser OK后如何不退出?,java,swing,jfilechooser,Java,Swing,Jfilechooser,场景是,当选择一个单选按钮时,我打开一个JFileChooser来选择一个目录,其中应该有一些文件。 我试图显示一条错误消息,我想再次显示目录选择器。 这是代码(当radiobutton更改时我调用的函数): 非常感谢! F.在创建JFileChooser时,重写其approveSelection方法() 这样,文件选择器不会关闭并重新打开,而是保持打开状态,直到满足所需条件(或执行“取消”) 另外,您应该为JOptionPane提供一个parentComponent,而不是给它null使用do
F.在创建
JFileChooser
时,重写其approveSelection
方法()
这样,文件选择器不会关闭并重新打开,而是保持打开状态,直到满足所需条件(或执行“取消”)
另外,您应该为
JOptionPane
提供一个parentComponent
,而不是给它null
使用do{},同时在JFileChooser&JOptionPane周围循环,并显示一条类似“未找到必需的文件。是否要选择其他目录”的消息,而不是错误消息,使用JOptionPane.YES\u NO\u选项
并在他们说不时退出尝试下一步:
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);
}
谢谢,但递归调用该函数还不远。我想我可能会遇到堆栈错误问题…谢谢你,但是递归调用函数已经不远了。我想我可能会有堆栈错误问题…调用堆栈不会有问题。
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);
}
}
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);
}