先生们女士们晚上好,
我有一个无法解决的 Java Swing 问题,也许你可以帮助我。这里是:
- 我有一个使用 BorderLayout 的 JFrame 和许多 JPanel。
- 每次我需要放置一个新屏幕时(即从主菜单中,当单击搜索按钮时,转到搜索菜单),我只需删除位于中心的组件(JPanel),然后放置新屏幕(新 JPanel)在中心代替。
- 这样,每次我想建立一个新屏幕时,我就不会调用所有的页眉和页脚对象。
除了这个小问题之外,这个系统一切正常:我想在每次创建新的 JPanel 或更改回现有的 JPanel 时触发一些方法(一般来说,每次出现 JPanel 时)。
为了做到这一点,我尝试实现 ComponentListener 的 componentShown(ComponentEvent e) 方法,并将 ComponentListener 添加到我放在 JFrame 中心的 JPanel 中,但它不起作用。在此之后,我做了一些研究,发现这个 componentShown (@ComponentListener) 方法只有在 JPanel 的可见性发生变化(从不可见到可见或相反)时才有效。不幸的是,我没有改变 JPanel 的可见性,只是用另一个替换它:删除当前的,然后添加新的。下面的代码说明了我如何替换 JPanel。
// Get the JPanel located in the center of our JFrame
JPanel currentView = (JPanel) myFrame.getContentPane().getComponent( 2 );
if ( currentView != null )
{
// Remove it from the JPanel
myFrame.getContentPane().remove( currentView );
}
// Add the new JPanel
myFrame.getContentPane().add( otherView, BorderLayout.CENTER );
// Pack the JFrame and show it
myFrame.pack();
所以这就是我所拥有的。如果您能帮助我,我将不胜感激。