女士们先生们晚上好,
我遇到了一个关于Java Swing的问题,很难解决,希望你能帮助我。以下是问题:
- 我有一个使用边界布局(BorderLayout)和许多JPanel的JFrame。
- 每次我需要放置一个新屏幕(即从主菜单,当点击搜索按钮时,转到搜索菜单)时,我只需删除位于中心的组件(JPanel),并将新屏幕(new JPanel)放在中心位置。
- 这样,我不必每次想要放置新屏幕时都调用所有的标题和页脚对象。
使用这种系统一切正常,除了这个小问题:我想在每次放置一个新的JPanel或切换回现有的JPanel时触发一些方法(通常情况下,每次出现一个JPanel时)。
为了做到这一点,我尝试实现ComponentListener的componentShown(ComponentEvent e)方法,并向我放置在JFrame中心的JPanel添加了一个ComponentListener,但它没有起作用。之后,我进行了一些研究,发现这个componentShown(@ComponentListener)方法仅在JPanel的可见性更改时(从不可见到可见或相反)才起作用。不幸的是,我不是改变JPanel的可见性,只是将其替换为另一个JPanel:删除当前JPanel并添加新的JPanel。下面的代码说明了我如何替换JPanels。
// 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();
以下是需要翻译的内容:
这是我的问题,如果你能帮忙解决,我会非常感激。
contentPane
的CENTER
位置,且采用CardLayout
的JPanel
来代替手动添加或移除多个JPanel
。如何使用CardLayout
。 - Jeffrey