[英]Refresh Panel on CardLayout Swap
如何从容器CardLayout刷新面板上的JPanel?
使用show()
方法。 从Java API:
使用addLayoutComponent翻转到使用指定名称添加到此布局的组件。 如果不存在这样的组件,则没有任何反应。
CardLayout#first()
, next()
和previous()
做类似的事情。
有时,当我像这样进行面板交换时(虽然不是我在CardLayout
记得的,但是自从我使用它已经有一段时间了),我还需要再次打包框架。 如果这不起作用,你可以调用revalidate()
,这让Swing知道需要重新绘制组件。
您可能还需要考虑使用选项卡式窗格 ,因为它会为您执行大量此操作; 我开始尝试使用CardLayout
的项目,并决定使用选项卡式窗格。 当然,取决于你想做什么。
是否有一个actionlistener或者我可以让它重新加载/刷新屏幕上的数据?
假设您有一个为视图(面板)提供数据的模型,通常有两种方法:
安排您的模型扩展Observable
和您的视图以注册为Observer
。
安排您的模型来管理EventListenerList
,实际上创建了您自己的ActionEvent
模拟。
在任何一种方法中,使用切换视图的控件的侦听器告诉模型更新其注册的观察者/侦听器。 “ 如何使用CardLayout ”中的示例使用JComboBox
和itemStateChanged()
。 有进一步的讨论在这里 。
show()方法可以实现切换面板的技巧,但它不会“刷新”数据。 是否有一个actionlistener或者我可以让它重新加载/刷新屏幕上的数据?
是否有一个actionlistener或者我可以让它重新加载/刷新屏幕上的数据?
您可以使用AncestorListener。 将组件添加到Container时会触发它。 因此,当你交换卡片时,事件就会被触发。 您需要将侦听器添加到添加到CardLayout的每个面板:
CardLayout的另一个问题是面板在交换时不会获得焦点。 我使用这种方法将焦点放在面板上。 查看卡片布局焦点 。
panel.addAncestorListener(...);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.