我在jframe中放置了一个定制的jcomponent(很好地放置在jframe上的jpanel中)。我使用setdefaultcloseoperation()将jframe设置为 DISPOSE_ON_CLOSE .我的自定义组件有一个计时器,在框架关闭后继续运行。我知道我可以在jframe中添加一个windowlistener,然后调用自定义组件停止,但是我更希望我的组件被完全封装。当父jframe从jcomponent中关闭时,是否有任何事件可用于检测?
DISPOSE_ON_CLOSE
wljmcqd81#
你可以试试这个代码。 frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); //here other actions } } ); 其中frame是jframe的对象
frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); //here other actions } } );
2uluyalo2#
如果您的组件需要对某种事件做出React,那么它必须实现某种侦听器——那么为什么不让您的组件实现windowlistener并向所有者jframe注册它呢?
a7qyws3x3#
你们班实施了吗 windowClosing 事件 WindowListener .添加 AncestorListener 到您的自定义组件并侦听 ancestorAdded 事件。当您将组件添加到可见的gui或实现包含组件的gui时,会生成此事件。在 ancestorAdded 事件将windowlistener添加到框架中。您可以使用 SwingUtilties.windowForComponent(...) 方法。现在所有的逻辑都包含在你的类中了。
windowClosing
WindowListener
AncestorListener
ancestorAdded
SwingUtilties.windowForComponent(...)
dly7yett4#
你也可以使用 HierarchyListener :
HierarchyListener
//@see javax/swing/plaf/basic/BasicProgressBarUI.java class Handler implements ChangeListener, PropertyChangeListener, HierarchyListener { // we don't want the animation to keep running if we're not displayable @Override public void hierarchyChanged(HierarchyEvent he) { if ((he.getChangeFlags() & HierarchyEvent.DISPLAYABILITY_CHANGED) != 0) { if (progressBar.isIndeterminate()) { if (progressBar.isDisplayable()) { startAnimationTimer(); } else { stopAnimationTimer(); } } } } //... }
4条答案
按热度按时间wljmcqd81#
你可以试试这个代码。
frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); //here other actions } } );
其中frame是jframe的对象2uluyalo2#
如果您的组件需要对某种事件做出React,那么它必须实现某种侦听器——那么为什么不让您的组件实现windowlistener并向所有者jframe注册它呢?
a7qyws3x3#
你们班实施了吗
windowClosing
事件WindowListener
.添加
AncestorListener
到您的自定义组件并侦听ancestorAdded
事件。当您将组件添加到可见的gui或实现包含组件的gui时,会生成此事件。在
ancestorAdded
事件将windowlistener添加到框架中。您可以使用SwingUtilties.windowForComponent(...)
方法。现在所有的逻辑都包含在你的类中了。
dly7yett4#
你也可以使用
HierarchyListener
: