繁体   English   中英

如何在MVC中将ActioListener添加到JFileChooser

[英]How do I add an ActioListener to a JFileChooser in MVC

目前,我的视图类中有一个JFileChooser ,我想触发存储在控制器类中的某些事件。 我将ActionListeners添加到JButtons ,如下所示:

view.setUploadButtonListener(new UploadButtonListener());

其中view是我的视图类,而UploadButtonListener是我的控制器类的内部类。 对于JFileChooser来说,同样的方法似乎不起作用(至少我无法弄清楚)。

如何将ActionListener添加到我的JFileChooser ,当用户单击OK时将触发它。 我也可以在侦听器中将所选文件路径作为参数传递吗?

如图所示在这里 ,你可以使用选配的addActionListener()方法。 示例实现了多个侦听器,包括ActionListener 为了获得更大的灵活性,可以考虑替换一个合适的Action

我建议:“ 如何使用文件选择器

JFileCooser showOpenDialog方法会弹出一个“ Open File文件”选择器对话框,并在弹出窗口中返回文件选择器的状态值:

  • JFileChooser.CANCEL_OPTION
  • JFileChooser.APPROVE_OPTION
  • JFileCHooser.ERROR_OPTION

因此,这是您的ActionListener的代码,它将打开“ File Chooser并根据需要做出反应:

public void actionPerformed(ActionEvent e) {
    if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
        File file = fc.getSelectedFile();
        String name = file.getName();
        ...
    }
}

在此处阅读有关showOpenDialog更多信息: showOpenDialog-doc

要在视图中包含视图逻辑,在控制器中包含控制器逻辑,我会采取类似的措施:

class UploadButtonListener implements ActionListener{
    private View view;
    public UploadButtonListener(View view){
        this.view = view;
    }
    @Override
    public void actionPerformed(ActionEvent arg0) {
        String filename = view.getFileName();
        if(!filename.isEmpty()){
                    ... your logic
            }
    }

}

然后将以下方法添加到您的视图类中:

public String getFileName(){
   JFileChooser fc = new JFileChooser();
   if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
     return fc.getSelectedFile().getName();
   else
     return "";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM