2016-08-12 5 views
-1

私はバインド(Netbeans)を介して私の(別の)コントローラクラスにバインドされたJDialogを持っています。私のダイアログには「閉じる」ボタンがあります。このボタンのactionプロパティは、コントローラ内のアクションにバインドされています。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

私は2つのクラスを持っています:コントローラーをBeanとして含むダイアログ、およびダイアログへの参照を持たないコントローラー。 – gorootde

+0

コードを投稿してください –

答えて

3

私は今、私と一緒にコンパイラを持っていますが、私はあなたが欲しいものを正しく理解すれば、これに似ていません。

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

私がコンパイルしている場合にチャンスを持っているときに私は見てよそれには問題があります。私はあなたの問題を解決することを願っています。

関連する問題