2016-10-12 141 views
1

我有一些问题在我的GUI上使用默认值重新绘制JPanel。Panel.repaint()似乎不是刷新面板

我现在使用的代码如下,再说,我不习惯,也不是真正懂行的有关Java代码,所以请原谅我让菜鸟错误:

private void btnResetActionPerformed(java.awt.event.ActionEvent evt) {           
    ... 

    pnlWagens1 = new pnlWagens(); 
    UpdateGUI(); 
}           

private void UpdateGUI(){ 
    pnlWagens1.repaint(); 
} 

到目前为止我我尝试了上面的代码,并将JPanel设置为null,重新绘制,插入面板的新实例,重新绘制。 到目前为止,没有什么成果,因为最终,我仍然坚持在我的GUI上显示的旧面板(以及它的值)。

基本上,我最初制作一个带绿色背景的面板,将背景设为红色,然后重新将面板重新设为绿色背景。然而,最后,在重置后,它仍然显示红色背景的旧面板。

任何有关我可能做错/俯瞰的见识将不胜感激。

+1

如需更好的帮助,请考虑创建并发布[最小,完整和可验证示例程序](http://stackoverflow.com/help/mcve)。我们不想看到你的整个程序,而是你应该将你的代码压缩到仍然编译的最小位,没有额外的代码与你的问题无关,但仍然表明你的问题。通过简单地尝试隔离并暴露错误,您可能很好地解决了这个问题。 –

+0

为了简洁起见,我想翻译上面的代码:在上面的代码中,我没有看到你的错误,提示它没有显示代码。首先你必须隔离错误,因此需要[mcve]。 –

+0

唯一可能的问题是您正在创建一个新的pnlWagens对象,因此您可能没有更新正确的对象 - 但很难说。 –

回答

3

假设这是所有相关的代码(这UpdateGUI不使用addremove与你有板基准),然后改变什么反对pnlWagens1指的是在你的本地类将不会改变其他的引用仍然指的是旧对象。旧对象pnlWagens1仍然在另一个位置由Swing引用,从您最初在某个容器上调用add时开始。

你需要做的是removepnlWagens1从容器中,改变pnlWagens1像你现在这样,再addpnlWagens1到容器,并调用然后调用容器上都revalidate()repaint()

+0

这样做的工作很好!我其实并没有想过将它从容器中移出,我真的相信这个参考文件只是在更改时更新。谢谢! – Yorrick

+0

@Yorrick没问题。在Java中,引用是按值传递的,如果您调用方法并传递引用,该方法实际上会获取引用的副本。 – NESPowerGlove