如何动态重绘JFrame中的JPanel?

时间:2012-05-08 21:22:16

标签: java swing oop object

我正在制作一个简单的java swing程序,允许用户玩二十一点。我在程序中有10-15个代表1“屏幕”的类,它们各自扩展JLayeredPane并实现动作监听器。我还有甲板,卡片,圆形,球员等其他课程。

然后在另一个类中有两个属性:一个数组arra(包含所有面板)和一个Jframe一个(所有面板都将到达),public static void main。

然后在同一个班级我做了两件事,一个替换面板的方法:

public void screenInit(int i)
{
    one.setContentPane(arra[i-1]);
    one.invalidate();
    one.validate();
    one.repaint();
}

然后我在psvm中创建这个类的对象,然后放入第一个面板。

所以我的问题是现在第一个面板已启动,它有一个动作监听器附加到JButton它如何访问在持有JFrame和数组的类中创建的JFrame,以便它可以使用上面的方法。现在,我每次都要创建一个新的框架,所以它建立在彼此之上?

如果无法做到这一点,我应该如何组织我的课程,使每个小组的多个按钮相互引导?

由于

1 个答案:

答案 0 :(得分:4)

1)如果您使用Swing JComponents,那么您可以删除代码行one.invalidate();,因为当前LayoutManager没有理由设置状态JPanel不是当前的有效元素显示GUI

2)如果remove / modify / add JComponent(s)位于已经可见的Container之上,那么我在代码行revalidate()repaint()

上取得了成功

3)没有人知道你的真实问题是什么,也没有人能在你的监视器中看到代码,更好的方法是通过重新绘制GUI来隔离问题并用SSCCE编辑你的问题