Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Swing文件选择器事件中检测批准按钮_Java_Swing_Jbutton_Jfilechooser - Fatal编程技术网

Java 在Swing文件选择器事件中检测批准按钮

Java 在Swing文件选择器事件中检测批准按钮,java,swing,jbutton,jfilechooser,Java,Swing,Jbutton,Jfilechooser,我知道还有另一种方法可以做到这一点,但我更愿意看看是否有人有这样做的答案。原来的方法是调用ShowDialog()函数后得到整数返回值;我想从事件本身(如下所示)中获取它。我已经在那里抛出了一些代码来检查是否选择了一个文件,但是我需要在它到达那里之前检查是否选择了批准按钮(OK按钮)。有人知道如何使用下面的设置来检查文件选择器对话框中按下的按钮吗 这是我的密码: private void FileChooser_OpenMouseClicked(java.awt.event.MouseEvent

我知道还有另一种方法可以做到这一点,但我更愿意看看是否有人有这样做的答案。原来的方法是调用ShowDialog()函数后得到整数返回值;我想从事件本身(如下所示)中获取它。我已经在那里抛出了一些代码来检查是否选择了一个文件,但是我需要在它到达那里之前检查是否选择了批准按钮(OK按钮)。有人知道如何使用下面的设置来检查文件选择器对话框中按下的按钮吗

这是我的密码:

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按钮?我想我正试图关注一种基于事件的编程风格,其中代码根据引发的事件做出反应,并抓住打开菜单e内的OK/approval按钮点击检查从我的角度来看,发泄似乎有点……混乱。也许我太习惯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)) 
        {



        }
    }        

如果我理解这个问题,您可能可以使用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);
  }
}