Java JLabel';s随机不在JFrame上显示图像

Java JLabel';s随机不在JFrame上显示图像,java,swing,netbeans,jframe,jlabel,Java,Swing,Netbeans,Jframe,Jlabel,好的,我正在编写一个程序来测试使用JLabels在JFrame上放置大量图像,这一直很顺利,直到发生了一个非常奇怪的错误,JFrame上完全随机的图像没有显示出来,但是调整大小或将帧移出屏幕并再次打开会使它们显示出来。我不知道是什么原因造成的 但90%的时间里都是这样: 下面是我的代码: public class JFrameTest extends JFrame{ int maxX=20; int maxY=20; int Coords[][]; ImageIcon wallImage =

好的,我正在编写一个程序来测试使用JLabels在JFrame上放置大量图像,这一直很顺利,直到发生了一个非常奇怪的错误,JFrame上完全随机的图像没有显示出来,但是调整大小或将帧移出屏幕并再次打开会使它们显示出来。我不知道是什么原因造成的

但90%的时间里都是这样:

下面是我的代码:

public class JFrameTest extends JFrame{
int maxX=20;
int maxY=20;
int Coords[][];
ImageIcon wallImage = new ImageIcon(getClass().getResource("/Resources/Wall.png"));
ImageIcon floorImage = new ImageIcon(getClass().getResource("/Resources/floor.png"));
ImageIcon voidImage = new ImageIcon(getClass().getResource("/Resources/Void.png"));
JPanel Jpan=new JPanel();


public JFrameTest(){
    Coords = new int[maxY][maxX];
    setTitle("TestFrame");
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(1200,800);
    Jpan.setSize(1200, 800);
    add(Jpan);
    Jpan.setLayout(null);
    setVisible(true);
    for(int i =0; i<Coords.length;i++){
        for(int j =0; j<Coords[i].length; j++){
            if (Coords [i][j] == 0)
                drawWalls(i*64,j*64);
        }
    }
}
public void drawWalls(int x,int y){
    JLabel pic2 = new JLabel();
    pic2.setIcon(wallImage);
    Jpan.add(pic2);
    add(Jpan);
    pic2.setBounds(new Rectangle(new Point(y,x),pic2.getPreferredSize()));
    pic2.setVisible(true);
    setVisible(true);
}
公共类JFrameTest扩展了JFrame{
int max=20;
int maxY=20;
国际协调[];
ImageIcon wallImage=新的ImageIcon(getClass().getResource(“/Resources/Wall.png”);
ImageIcon floorImage=新的ImageIcon(getClass().getResource(“/Resources/floor.png”);
ImageIcon voidImage=新的ImageIcon(getClass().getResource(“/Resources/Void.png”);
JPanel Jpan=新的JPanel();
公共JFrameTest(){
Coords=新整数[maxY][maxX];
setTitle(“测试帧”);
可设置大小(假);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
设置大小(1200800);
Jpan.setSize(1200,800);
add(Jpan);
Jpan.setLayout(空);
setVisible(真);
对于(int i=0;i在末尾使用setVisible(true),在JLabel对象上调用setVisible()没有意义。只需在末尾使用update方法即可

Jpan.update();

尝试在构建GUI(添加所有标签后)结束时执行
setVisible(true);
而不是之前。曾经被否决过的人,不知道如何摇摆。啊,太好了,工作得很完美。我很遗憾,根本没有注意到drawWalls()方法中的setVisible()。非常感谢。