是否有办法(例如,通过事件?)确定Swing组件何时变为“可显示” - 根据Component
.getGraphics的Javadoc?
我试图这样做的原因是我可以调用getGraphics()
,并将其传递给我的组件的'渲染策略'。
我尝试添加ComponentListener
,但componentShown
似乎没有被调用。还有什么我可以尝试的吗?
感谢。
另外,保持我收到的Graphics
对象是否可以?或者是否有可能在Component
的生命周期后期创建新的? (例如,在调整大小/隐藏后?)
答案 0 :(得分:3)
添加HierarchyListener
public class MyShowingListener {
private JComponent component;
public MyShowingListener(JComponent jc) { component=jc; }
public void hierarchyChanged(HierarchyEvent e) {
if((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED)>0 && component.isShowing()) {
System.out.println("Showing");
}
}
}
JTable t = new JTable(...);
t.addHierarchyListener(new MyShowingListener(t));
答案 1 :(得分:1)
您可以收听调整大小事件。首次显示组件时,会将其从0,0调整为布局管理器确定的任何大小(如果有的话)。
答案 2 :(得分:0)
您需要检查组件层次结构。调用AncestorListener.ancestorAdded后检查。
答案 3 :(得分:0)
我总是使用Coomponent.addNotify知道组件何时可以渲染。不确定是否是最好的方法,但它对我有用。当然,您必须对组件进行子类化。
Component.isDisplayable应该是正确的答案,但我知道它对我来说不起作用,因为我认为它会(我不记得为什么,但有一些东西,我切换到addNotify)。
查看SUN的源代码,我可以看到addNotify触发了HierarchyEvent.SHOWING_CHANGED,因此这是获得通知的最佳方式。