2010-09-06 150 views
1

我有一个JFrame,当用户按下按钮时显示一个输入jdialog。我需要jdialog处于非模态模式,并且一旦用户按下ok, 我想根据输入做一些操作。现在我在jdialog中传递我的视图作为参考,这样当用户按下ok时,jdialog会调用视图的方法 。有没有更加标准化的方法来处理这个问题,或者这是唯一的方法? 我需要的JDialog是在非模态模式在非模态模式下等待jdialog

感谢

回答

1

您可以通过一个java.lang.Runnable要从所谓的JDialog当用户按下OK按钮。通过这种方式,您可以将要运行的代码放入Runnable本身。

+0

这是一个非常好的主意,但我仍然需要在gui组件中通过引用来更新(使用EventQueue的cource)。现在,因为我回到视图中,组件可用。有任何想法吗? – Cratylus 2010-09-06 15:57:32

+0

以及可用于回调的组件的问题是什么? – 2010-09-06 16:27:04

+0

没有问题,我是新来的摆动,我不知道它是一种方法或有其他一些分离模式。谢谢您的回复! – Cratylus 2010-09-06 18:30:01

1

您使用回调的当前方法非常简单,但observer pattern通常用于减少紧密耦合。两种实现在Swing是典型的:

  1. 安排您的视图来实现Observer接口,让您的输入窗口委托的Observable一个包含实例。方法notifyObservers()可用于将对象引用传递给Observer。可以找到一个非常简单的例子here

  2. 让您的输入窗口保持EventListenerList使用视图注册感兴趣的自定义事件。听众感兴趣的数据可以在事件本身中传递。重新使用现有的javax.swing.event或对这种类型的自定义事件建模可能很方便。每个JComponent包含一个EventListenerList

+0

这样,如果打开4个jdialog,JFrame即观察者将被注册为x(例如4)个JDialog。用户在每个对话框中按下ok,并且在观察者中始终调用相同的方法。为了达到这个目的,我应该提供一些关于接下来应该发生什么类型处理的额外信息?这是处理这个问题的方法吗?因为现在,用户拥有dialogA,当它关闭时,在JFrame中调用methodA,因为我知道我在代码中的位置。 – Cratylus 2010-09-06 15:55:21

+0

@ user384706:任何一种方法都允许将信息传递给观察者。我已经详细阐述过了。 – trashgod 2010-09-06 16:23:06

+0

我只是想知道,如果正确的方式是通过某种例如“doA”信息,并且在观察者的更新(Observable o,Object arg)方法中,例如if(arg.msg ==“doA “)callA()else callB()等。我在问,因为我是gui编程的新手,我正试图理解正确的方式来完成这些事情。非常感谢你! – Cratylus 2010-09-06 18:33:06