java gui无法正确显示

时间:2015-08-30 04:18:54

标签: java user-interface

从其他方法调用GUI后我的GUI出现问题,我正在制作多米诺骨牌游戏。

在这里的图片中,GUI工作正常并完成它应该做的事情,但是在第二个图像中我试图使用完全相同的GUI然而它通过不同的方式解析(我有一个开始屏幕,它将调用该方法并使GUI可见)。 在控制台中,切片存储在已分配的数组中,也可以绘制到GUI

First Image

这里的第二个图像是在firstScreen()类的actionlistener中调用playerVSAI方法。这个类只是左边显示的窗口。然而,控制台,playerVSAI方法似乎按预期工作,但是不显示图块的图像。

将数据存储到数组中并将图块绘制到同一个上的方法,我已经附上了以下代码的片段

        if(input2.equalsIgnoreCase("l"))
    {

        //add selected input to gameboard
        gameboardX.add(0,player.get(input1));

        JLabel imageTile = new JLabel(new ImageIcon(rotate(bi,rotateDegree)));

        //place domino image to left, Y direction still the same, only shift X , 
        // shift X by turnCounter, as turnCounter++  larger amount can only shift outwards
        c.gridy = startingY;
        c.gridx = startingX - turnCounter ;

        //add image
        gui.add(imageTile,c);
        gui.revalidate();
    }

Second Image

edited

2 个答案:

答案 0 :(得分:0)

确保你已经调用了setVisible(true);在向GUI添加元素的最后一行。

答案 1 :(得分:0)

这看起来和感觉就像一个线程问题,可能是你的线程和Swing之间的竞争条件(但这样的事情只能通过从主线程运行setVisible来实现)。

确保启动窗口的所有逻辑都是从EDT运行的,并且没有数据从其他线程传递给Swing对象。最简单的架构是将所有代码放入EventQueue#invokeLater,之后你可以转向某种形式的同步(坦率地说,对于多米诺骨牌游戏,我不会......除非你有大量的人工智能运行其中一名球员。)