繁体   English   中英

在CardLayout交换上刷新面板

[英]Refresh Panel on CardLayout Swap

如何从容器CardLayout刷新面板上的JPanel?

使用show()方法。 从Java API:

使用addLayoutComponent翻转到使用指定名称添加到此布局的组件。 如果不存在这样的组件,则没有任何反应。

CardLayout#first()next()previous()做类似的事情。

有时,当我像这样进行面板交换时(虽然不是我在CardLayout记得的,但是自从我使用它已经有一段时间了),我还需要再次打包框架。 如果这不起作用,你可以调用revalidate() ,这让Swing知道需要重新绘制组件。

您可能还需要考虑使用选项卡式窗格 ,因为它会为您执行大量此操作; 我开始尝试使用CardLayout的项目,并决定使用选项卡式窗格。 当然,取决于你想做什么。

是否有一个actionlistener或者我可以让它重新加载/刷新屏幕上的数据?

假设您有一个为视图(面板)提供数据的模型,通常有两种方法:

  1. 安排您的模型扩展Observable和您的视图以注册为Observer

  2. 安排您的模型来管理EventListenerList ,实际上创建了您自己的ActionEvent模拟。

在任何一种方法中,使用切换视图的控件的侦听器告诉模型更新其注册的观察者/侦听器。 如何使用CardLayout ”中的示例使用JComboBoxitemStateChanged() 有进一步的讨论在这里

show()方法可以实现切换面板的技巧,但它不会“刷新”数据。 是否有一个actionlistener或者我可以让它重新加载/刷新屏幕上的数据?

是否有一个actionlistener或者我可以让它重新加载/刷新屏幕上的数据?

您可以使用AncestorListener。 将组件添加到Container时会触发它。 因此,当你交换卡片时,事件就会被触发。 您需要将侦听器添加到添加到CardLayout的每个面板:

CardLayout的另一个问题是面板在交换时不会获得焦点。 我使用这种方法将焦点放在面板上。 查看卡片布局焦点

panel.addAncestorListener(...);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM