当我点击按钮更改right_pan(JPanel)的内容时,我遇到了问题; 我有3个JPanel: 另外两个是pan_glob: right_pan和left_pan(集成到主JFrame中,名为“main”,见截图),另一个外部JPanel名为cree_client(包含文本框)。
当我点击一个按钮时,我想将cree_client(JPanel)的内容加载到right_pan(JPanel)。
我尝试了这个,但它不起作用:
private void jMenuItem23ActionPerformed(java.awt.event.ActionEvent evt) {
cree_client cc=new cree_client();
this.right_pan.removeAll();
this.right_pan.validate();
this.right_pan.add(cc);
this.right_pan.revalidate();
}
有什么帮助?
答案 0 :(得分:2)
使用任何UI工具包的第一条规则:不要删除/添加子项来控制可见性。它在几乎任何UI工具包中都不能很好地工作。它需要在工具包上进行更多的工作才能正确处理它,而Swing则需要加倍。而是使用可见性,或者我打赌你应该使用的是CardLayout
。具有CardLayout
的面板允许您在多个屏幕之间切换:
public class StackPanel extends JPanel {
CardLayout layout = new CardLayout();
public StackPanel() {
super();
setLayout( layout );
}
public addStack( String name, JComponent child ) {
add( name, child );
}
public void showStack( String name ) {
layout.show( this, name );
}
}
CardLayout layout = new CardLayout();
StackPanel stack = new StackPanel();
stack.addStack( "panelOne", panelOne );
stack.addStack( "panelTwo", panelTwo );
...
JButton someButton = new JButton( new AbstractAction("Next" ) {
public void actionPerformed(ActionEvent evt ) {
stack.showStack( "panelTwo" );
}
} );
如果您不想在两个或更多屏幕之间切换,则可以使用setVisible()
隐藏并显示不同的屏幕。
答案 1 :(得分:0)
首先,您是否确实检查过您的动作监听器中的代码是否正在执行?我对JMenu
并不熟悉,但我认为该方法应该更像
public void ActionPerformed(ActionEvent evt){...}
并且应该将动作侦听器添加到JMenuItem
本身 - 动作执行方法体内的快速System.out.println()
语句应该可以帮助您确定更改JPanel的代码是否正在执行!
其次,如果您的actionPerformed方法正在运行,您可能需要在重新验证后尝试运行Component.repaint()
方法。此外,可能需要尝试“重新验证”和“重新绘制”主要JPanel(包含您正在更改的那个)(在您的情况下是right_pan
的父级)!