0

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

不同的是,原来的方法在对话框关闭时会得到一个返回值,而在这个方法中,我不知道有什么方法可以得到这个返回值(我相信盒子已经关闭了,但是没有什么可做的)捕获返回值)。如果我看起来没有多大意义,我深表歉意。

编辑:更多信息

所以这就是我创建对话的方式(一个菜单项,“打开”引发一个事件,该事件调用 showOpenDialog() 方法。如您所见,它没有捕获返回值(请耐心等待)。是否可能然后获取返回值或设计一种方法来确定是否在 MouseClicked 事件中按下了 OK 按钮?我想我正在尝试专注于基于事件的编程风格,其中代码根据引发的事件做出反应, 并在 Open Menu 事件中检查 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)) 
        {



        }
    }        
4

1 回答 1

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);
  }
}
于 2012-10-18T07:34:00.667 回答