2

我目前JFileChooser在我的视图类中有一个,我想触发存储在我的控制器类中的某些事件。我添加ActionListenersJButtons以下内容:

view.setUploadButtonListener(new UploadButtonListener());

view我的视图类在哪里,并且UploadButtonListener是我的控制器类的内部类。同样的方法似乎不起作用JFileChooser(至少我无法弄清楚)。

当用户单击OK时,如何ActionListener向我添加一个JFileChooser触发。我也可以将选定的文件路径作为参数传递给侦听器吗?

4

3 回答 3

2

如此处所示,您可以使用选择器的addActionListener()方法。该示例实现了几个侦听器,包括ActionListener. 为了获得额外的灵活性,请考虑替换一个合适的Action.

于 2013-10-17T11:21:54.143 回答
1

我推荐:“如何使用文件选择器

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();
        ...
    }
}

在此处阅读更多信息showOpenDialogshowOpenDialog - doc

于 2013-10-17T11:33:33.127 回答
1

为了让你的视图逻辑在视图中,控制器逻辑在控制器中,我会这样做:

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 "";
}
于 2013-10-17T14:07:05.790 回答