检测Swing FileChooser事件中的Approval按钮

时间:2012-10-18 02:36:36

标签: java swing jbutton jfilechooser

我知道还有另一种方法可以做到这一点,但我更愿意看看是否有人有这样做的答案。最初的方法是在调用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)) 
        {



        }
    }        

1 个答案:

答案 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);
  }
}