【发布时间】:2012-08-15 11:51:09
【问题描述】:
Component.isShowing() 和 Component.isDisplayable() 有什么区别?我想用它们来决定是否应该停止/启动计时器。
【问题讨论】:
-
您不明白 api 文档的哪一部分?
-
你不能显示 JComponent 不能显示
标签: java swing jcomponent
Component.isShowing() 和 Component.isDisplayable() 有什么区别?我想用它们来决定是否应该停止/启动计时器。
【问题讨论】:
标签: java swing jcomponent
一个组件isShowing()when
确定此组件是否显示在屏幕上。这表示 该组件必须是可见的,并且它必须在一个容器中 是可见的和显示的。
isShowing() 是递归的,也会检查所有父组件,但 isDisplayable() 和 isVisible() 只验证组件的状态,而不验证其父组件的状态。
这意味着您的组件当前显示在框架、面板等的屏幕上。setVisible(true) --> isShowing() 返回 true(在大多数情况下)setVisible(false) --> isShowing() 返回 false(在所有情况下)
isDisplayable()何时
确定此组件是否可显示。一个组件是 连接到本机屏幕资源时可显示。
当一个组件被添加到一个可视组件时 包含层次结构或其包含层次结构时 可显示的。包含层次结构在其 祖先窗口要么被打包,要么可见。
当一个组件从 可显示的包含层次结构或当它的包含层次结构是 变得无法显示。包含层次结构在以下情况下无法显示 它的祖先窗口被释放。
这意味着您的组件处于可以在屏幕上显示但当前不需要在屏幕上显示以处于displayable 状态的状态。例如,即使之前在组件上调用了 setVisible(false)(因此组件“不可见”),组件仍然是 displayable 并且 isDisplayable() 将返回 true。
【讨论】:
isShowing()方法的以下javadoc: 注意:有时无法检测组件是否对用户实际可见。这可能在以下情况下发生: - 组件已添加到可见的 ScrollPane 但组件当前不在滚动窗格的视口中。 - 该组件被另一个组件或容器遮挡。
setVisible(true),但组件的边界在 JPanel 之外,因此用户实际上看不到它,会发生什么情况。 isVisible、isDisplayable 和 isShowing 会输出什么?
isDisplayable() 如果组件的对等点不为空(对等点是本机窗口容器),则返回 true。
isShowing() 如果组件是可见的(即调用了 setVisible(true) 或 show(true)),则返回 true,它的对等点是非空的,并且如果它也有父级,则父级也正在显示(即父级上的 isShowing() 返回 true)。
【讨论】:
据我了解,如果组件可见,则 Component.isShowing() 返回 true,如果组件处于可显示层次结构中,则 Component.isDisplayable() 返回 true,这意味着它可以显示。我认为方法名称本身就可以说明问题。
【讨论】:
isShowing() 也会检查父级,isVisible() 不会。