Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在GridLayout中更新网格_Java_Refresh_Jpanel_Repaint_Grid Layout - Fatal编程技术网

Java 在GridLayout中更新网格

Java 在GridLayout中更新网格,java,refresh,jpanel,repaint,grid-layout,Java,Refresh,Jpanel,Repaint,Grid Layout,我在JPanel中通过GridLayout布局了一组对象。我需要能够在数组中的索引中重新创建对象,并更新GridLayout以反映这一点。到目前为止,我还找不到“刷新”或重新绘制GridLayout的方法。是否可以在不创建整个GridLayout或JPanel的情况下刷新GridLayout?假设我没有访问JFrame的权限 import javax.swing.*; import java.awt.*; public class Test { public static void m

我在JPanel中通过GridLayout布局了一组对象。我需要能够在数组中的索引中重新创建对象,并更新GridLayout以反映这一点。到目前为止,我还找不到“刷新”或重新绘制GridLayout的方法。是否可以在不创建整个GridLayout或JPanel的情况下刷新GridLayout?假设我没有访问JFrame的权限

import javax.swing.*;
import java.awt.*;

public class Test
{
    public static void main(String args[])
    {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();

        panel.setLayout(new GridLayout(5,5));

        JLabel[][] labels = new JLabel[5][5];
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                labels[j][i] = new JLabel("("+j+", "+i+")");
                panel.add(labels[j][i]);
            }
        }

        labels[0][0] = new JLabel("Hello World");

        //Without doing it this way (cause my objects can't do this)
        //labels[0][0].setText("Hello World!");

        frame.add(panel);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.pack();
        frame.setResizable(false);
        frame.setVisible(true);
    }
}
import javax.swing.*;
导入java.awt.*;
公开课考试
{
公共静态void main(字符串参数[])
{
JFrame=新JFrame();
JPanel面板=新的JPanel();
面板设置布局(新网格布局(5,5));
JLabel[][]标签=新的JLabel[5][5];
对于(int i=0;i<5;i++)
{
对于(int j=0;j<5;j++)
{
标签[j][i]=新的JLabel(“(“+j+”,“+i+”));
添加(标签[j][i]);
}
}
标签[0][0]=新的JLabel(“Hello World”);
//不这样做(因为我的对象不能这样做)
//标签[0][0].setText(“你好,世界!”);
框架。添加(面板);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setresizeable(false);
frame.setVisible(true);
}
}

我不明白为什么不能只更新标签上的文字

为什么需要“重新创建对象”?这毫无意义。但如果您真的需要这样做,那么代码将类似于:

panel.remove(0);
panel.add(theNewLabel, 0);
panel.revalidate();
panel.repaint();