我有一个JFrame,当用户按下按钮时显示一个输入jdialog。我需要jdialog处于非模态模式,并且一旦用户按下ok, 我想根据输入做一些操作。现在我在jdialog中传递我的视图作为参考,这样当用户按下ok时,jdialog会调用视图的方法 。有没有更加标准化的方法来处理这个问题,或者这是唯一的方法? 我需要的JDialog是在非模态模式在非模态模式下等待jdialog
感谢
我有一个JFrame,当用户按下按钮时显示一个输入jdialog。我需要jdialog处于非模态模式,并且一旦用户按下ok, 我想根据输入做一些操作。现在我在jdialog中传递我的视图作为参考,这样当用户按下ok时,jdialog会调用视图的方法 。有没有更加标准化的方法来处理这个问题,或者这是唯一的方法? 我需要的JDialog是在非模态模式在非模态模式下等待jdialog
感谢
您可以通过一个java.lang.Runnable
要从所谓的JDialog当用户按下OK按钮。通过这种方式,您可以将要运行的代码放入Runnable本身。
您使用回调的当前方法非常简单,但observer pattern通常用于减少紧密耦合。两种实现在Swing是典型的:
安排您的视图来实现Observer
接口,让您的输入窗口委托的Observable
一个包含实例。方法notifyObservers()
可用于将对象引用传递给Observer
。可以找到一个非常简单的例子here。
让您的输入窗口保持EventListenerList
使用视图注册感兴趣的自定义事件。听众感兴趣的数据可以在事件本身中传递。重新使用现有的javax.swing.event
或对这种类型的自定义事件建模可能很方便。每个JComponent
包含一个EventListenerList
。
这样,如果打开4个jdialog,JFrame即观察者将被注册为x(例如4)个JDialog。用户在每个对话框中按下ok,并且在观察者中始终调用相同的方法。为了达到这个目的,我应该提供一些关于接下来应该发生什么类型处理的额外信息?这是处理这个问题的方法吗?因为现在,用户拥有dialogA,当它关闭时,在JFrame中调用methodA,因为我知道我在代码中的位置。 – Cratylus 2010-09-06 15:55:21
@ user384706:任何一种方法都允许将信息传递给观察者。我已经详细阐述过了。 – trashgod 2010-09-06 16:23:06
我只是想知道,如果正确的方式是通过某种例如“doA”信息,并且在观察者的更新(Observable o,Object arg)方法中,例如if(arg.msg ==“doA “)callA()else callB()等。我在问,因为我是gui编程的新手,我正试图理解正确的方式来完成这些事情。非常感谢你! – Cratylus 2010-09-06 18:33:06
这是一个非常好的主意,但我仍然需要在gui组件中通过引用来更新(使用EventQueue的cource)。现在,因为我回到视图中,组件可用。有任何想法吗? – Cratylus 2010-09-06 15:57:32
以及可用于回调的组件的问题是什么? – 2010-09-06 16:27:04
没有问题,我是新来的摆动,我不知道它是一种方法或有其他一些分离模式。谢谢您的回复! – Cratylus 2010-09-06 18:30:01