我向构造函数面板发送了一个int数组,第一次创建gui,但下一个数组不会更新面板/jframe。
class panel extends JPanel{
public panel(int matriz[][]) {
this.setPreferredSize(new Dimension(300, 300));
this.setLayout(new GridLayout(5, 5));
this.revalidate();
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if(matriz[i][j]==1)
{
JButton boton = new JButton("");
boton.setBackground(Color.yellow);
this.add(boton);
boton.revalidate();
boton.repaint();
}
else
{
JButton boton = new JButton("");
this.add(boton);
boton.revalidate();
boton.repaint();
}
if(j==4) //imprimo pa ver si realmente me esta enviando datos desde creandoVida
System.out.println("n"+matriz[i][j]);
else
System.out.print(matriz[i][j]);
}
}
System.out.println("---");
this.doLayout();
this.revalidate();
this.repaint();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
this.revalidate();
}
无法根据发布的代码判断您正在做什么。但一些一般性评论:
-
您只需要在创建所有组件并将其添加到面板后执行一次重新验证()和重新绘制()。所以这两个语句应该在for循环之外
-
不要从paintComponent()方法中调用revalidate()。这可能会导致一个无限循环,因为很多次重新验证()都会再次调用重新绘制()。我认为你根本没有理由重写paintComponent()方法。
-
使用Java命名约定。类名以大写字符开头。但不要将类称为"Panel",因为已经有一个同名的AWT类了。
如果您需要更多帮助,请张贴正确的SSCCE来说明问题。
编辑:
事实上,我看到您正在创建一个全新的面板,所以这个类中不需要重新验证()、重新绘制()逻辑。
创建"面板"后,必须将面板添加到框架中,然后重新验证框架。否则,你所要做的就是创建一个位于内存中的面板,什么都不做。因此,创建这个面板的代码负责将面板添加到框架中。由于你没有发布那个代码,我不知道你在做什么。