我知道还有另一种方法可以做到这一点,但我更愿意看看是否有人有这样做的答案。最初的方法是在调用ShowDialog()函数后得到整数返回值;我想从事件内部(如下所示)中获取它。我在那里抛出一些代码来检查文件是否被选中,但我需要检查是否已经选择了批准按钮(OK按钮)。有没有人知道如何使用如下设置检查FileChooser对话框中按下了哪个按钮?
这是我的代码:
private void FileChooser_OpenMouseClicked(java.awt.event.MouseEvent evt) {
if(!FileChooser_Open.getSelectedFile().equals(null))
{
}
}
原始方法:
//In response to a button click:
int returnVal = fc.showOpenDialog(aComponent);
不同之处在于原始方法在对话框关闭时获得返回值,而在此方法中,我不知道获取该返回值的方法(我相信该框已经关闭,但有什么都没有抓住返回值)。如果我似乎没有多大意义,我道歉。
修改:更多信息
所以这就是我创建对话的方式(一个菜单项,“Open”引发一个事件,调用showOpenDialog()方法。正如你所看到的,它没有捕获返回值(跟我一起)。是否有可能获得返回值或设计一个方法来确定是否在MouseClicked事件中按下了OK按钮?我想我正在尝试专注于基于事件的编程风格,其中代码根据举起的事件,并在Open Menu事件中点击确定/批准按钮的点击似乎有点......从我的角度来看是混乱的。也许我已经习惯了C#/ WinForm解决这个问题的方法了?
private void MenuItem_OpenActionPerformed(java.awt.event.ActionEvent evt) {
FileChooser_Open.showOpenDialog(this);
}
private void FileChooser_OpenMouseClicked(java.awt.event.MouseEvent evt) {
if(!FileChooser_Open.getSelectedFile().equals(null))
{
}
}
答案 0 :(得分:1)
如果我理解了这个问题,你可以使用JFileChooser#approveSelection()方法:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
public class ApproveSelectionDemo {
public JComponent makeUI() {
final JPanel p = new JPanel();
final JFileChooser fileChooser = new JFileChooser() {
@Override public void approveSelection() {
if(!getSelectedFile().exists()) {
int returnVal = JOptionPane.showConfirmDialog(
this, "message", "title", JOptionPane.YES_NO_OPTION);
if(returnVal!=JOptionPane.YES_OPTION) {
return;
}
}
super.approveSelection();
}
};
p.add(new JButton(new AbstractAction("Open") {
@Override public void actionPerformed(ActionEvent e) {
int retvalue = fileChooser.showOpenDialog(p);
if(retvalue==JFileChooser.APPROVE_OPTION) {
System.out.println(fileChooser.getSelectedFile());
}
}
}));
return p;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
createAndShowGUI();
}
});
}
public static void createAndShowGUI() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new ApproveSelectionDemo().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}