2016-08-12 37 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(); 
     } 

我要看看,当我要编译的机会,如果它有问题。我希望它解决了你的问题。