2014-03-07 46 views
0

我做一个程序,我需要的是一个JFrame改变根据主JFrame的一个SELECCION及其部件,我试着这样做:的JFrame与动态的JPanel

public void agregarPanelSegunPrueba(FrmBoleto frm) 
{ 
    //this panel is a JPanel make with the graphical editor in netbeans 
    PnlPruebaDCExesoVelocidad pnl = new PnlPruebaDCExesoVelocidad(); 
    pnl.repaint(); 
    pnl.revalidate(); 
    frm.getContentPane().remove(frm.getPnlPruebasDistanciaTiempo()); 
    frm.getContentPane().add(pnl); 
    frm.pack(); 
    frm.setVisible(true); 

} 

有人知道这是错在这里。提前致谢。

+2

考虑使用一个['CardLayout'(HTTP://文档。 oracle.com/javase/tutorial/uiswing/layout/card.html)而不是添加删除整个面板。你可以看到一个简单的例子[这里](http://stackoverflow.com/a/21460065/2587435) –

+0

我想用netbeans编辑器制作没有cardlayout的JPanel。谢谢 – Premier

+1

它对于'CardLayout'看起来还是一个很好的情况。请参阅[**这个答案**](http://stackoverflow.com/a/21898439/2587435)了解如何在Netbeans GUI Builder的设计视图中使用'CardLayout'。 –

回答

0
public void agregarPanelSegunPrueba(FrmBoleto frm) 
{ 
    //this panel is a JPanel make with the graphical editor in netbeans 
    PnlPruebaDCExesoVelocidad pnl = new PnlPruebaDCExesoVelocidad(); 
    pnl.repaint(); 
    pnl.revalidate(); 
    frm.getContentPane().removeAll(); 
    frm.getContentPane().add(pnl); 
    frm.pack(); 
    frm.setVisible(true); 

} 
+0

一切都很好,直到它添加面板,最后JFrame显示我一个空的窗口。 – Premier

1

您需要revalidate();repaint();JPanel其中添加,只是容器给您添加您的面板。

您需要致电:取代

frm.getContentPane().revalidate(); 
frm.getContentPane().repaint(); 

pnl.repaint(); 
pnl.revalidate(); 

该行后:frm.getContentPane().add(pnl);

+0

不起作用,但不要紧,我要使用cardlayout。很多 – Premier

+0

@Premier调用revalidate(); &repaint();一次,作为最后的代码行,在对Swing GUI执行完所有更改后执行 – mKorbel

+0

@mKorbel似乎还有其他问题,因为'frm.pack();'解决了重新验证问题 – alex2410