2016-08-12 77 views
-1

我已經通過bean綁定(Netbeans)綁定到我的(單獨)控制器類的JDialog。我的對話框有一個「關閉」按鈕。此按鈕的操作屬性綁定到我的控制器中的操作。Swing:如何從控制器以編程方式關閉JDialog?

對話框:

public class AppVersionCheckDialog extends javax.swing.JDialog { 
    ... 
    binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, controller, org.jdesktop.beansbinding.ELProperty.create("${closeButtonActionListener}"), btnOk, org.jdesktop.beansbinding.BeanProperty.create("action")); 
    bindingGroup.addBinding(binding); 
    ... 
} 

所以基本上我在我的控制器有

public class AppVersionCheckDialogController extends AbstractController { 

    private final Action closeAction = new AbstractAction("Close") { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      // dialog.dispose() - no reference of dialog instance here 
     } 
    }; 


    public Action getCloseButtonActionListener(){ 
     return closeAction; 
    } 
} 

我沒有任何參考控制器內的對話框。我不想介紹一個,因爲它打破了將事物捆綁在一起的整個原則。

那麼如何關閉對話框呢?有沒有辦法將對話框實例綁定到我的控制器的屬性?如果是這樣,怎麼樣?

+0

哪裏定義了對話框? –

+0

直到現在都沒有。我有兩個類:包含作爲bean的控制器的對話框和沒有任何對話框引用的控制器。 – gorootde

+0

請發送代碼 –

回答

3

我沒有跟我現在編譯器,但如果我理解正確的話,你想要的是與此類似:

public void actionPerformed(ActionEvent e) { 
     Component component = (Component) e.getSource(); 
     JDialog dialog = (JDialog) SwingUtilities.getRoot(component); 
     dialog.dispose(); 
     } 

我要看看,當我要編譯的機會,如果它有問題。我希望它解決了你的問題。

相關問題