簡體   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