Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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 面板/按钮和重新喷漆_Java_Swing_Repaint - Fatal编程技术网

Java 面板/按钮和重新喷漆

Java 面板/按钮和重新喷漆,java,swing,repaint,Java,Swing,Repaint,作为学校的课程,我们必须提出一个自定义的项目,我选择了一个最初打算在actionscript上编写的游戏创意,但决定在Java上推动它。最初进展顺利,游戏代码正常,精灵动画处理得很好,一切都在游戏循环中维护。直到我开始尝试添加按钮和标签等组件 目前我的游戏的结构是这样的(GameSystem[处理循环和重画]--GameMenu[带开始游戏的简单介绍屏幕]GameContainer[保存游戏信息]) 我在游戏系统中的循环会更新所有必要的对象,重新绘制,然后告诉所有对象重新绘制 游戏系统: /**

作为学校的课程,我们必须提出一个自定义的项目,我选择了一个最初打算在actionscript上编写的游戏创意,但决定在Java上推动它。最初进展顺利,游戏代码正常,精灵动画处理得很好,一切都在游戏循环中维护。直到我开始尝试添加按钮和标签等组件

目前我的游戏的结构是这样的(GameSystem[处理循环和重画]--GameMenu[带开始游戏的简单介绍屏幕]GameContainer[保存游戏信息])

我在游戏系统中的循环会更新所有必要的对象,重新绘制,然后告诉所有对象重新绘制

游戏系统:

/**/for(int i = 0; i < UpdateList.size();i++){
/**/UpdateList.get(i).Update(delta * 1.1); // tell list the element is an object that extends an interface      
/**/}
/**/Game.repaint();

/**/@Override
/**/public void paint(Graphics g) {
/**/super.paint(g);
/**/Graphics2D g2d = (Graphics2D) g;
/**/g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
/**/        RenderingHints.VALUE_ANTIALIAS_ON);
/**/for(int i = 0; i < UpdateList.size();i++){
/**/UpdateList.get(i).paint(g2d); // tell list the element is an object that extends an interface       
/**/}
/**/}
在这一点上,我尝试了绘画、绘画组件、revalidate()以及从其他帖子中获得的各种其他东西,但都没有起到任何作用。我让按钮显示为可见的唯一方法是在游戏循环中删除重新绘制的调用。但是,这会影响游戏,因为没有对象被重新绘制


TL DR:我如何处理重新绘制更新列表中的各种对象和刷新Gamesystem面板,而不使任何组件(如按钮)消失?很抱歉,如果这是一个无趣的问题,但这是我第一次使用Java,因为我想从actionscript向外扩展,如果需要更多信息,我将很乐意添加到帖子中,感谢您的帮助

问题在于,您试图以不同于游戏的方式处理按钮的绘制

Game System
{
    paint loop
    {
        painting Game
    }
}

Components //managing the painting itself through paintComponent, trying to run at same time as Game System.
{
    paintComponent
}
因此,实际上,您希望从一个切换到另一个。您可以在
GameSystem
中使用
paintComponent()
而不是
paintComponent()
,后者为您管理图形的处理和重新绘制(如果它已经在扩展jComponent)


或者您需要开始管理按钮的绘制,就像您在游戏中所做的那样,而不是依赖
paintComponent()

1)为了更快地获得更好的帮助,请发布一个。2) 请不要忘记在问题中添加“?”!有些人在页面中搜索“?”,如果“问题”中不存在,则直接转到行中的下一个(实际)问题。此外,似乎您正在扩展
JFrame
并覆盖
paint(…)
方法?如果是这样,也不要这样做。为自定义绘制扩展
JPanel
,覆盖
paintComponent(…)
而不是绘制,并根据需要返回该组件的首选尺寸。很抱歉,我忘记了问号,因为我在问一个问号。同样在JFrames的情况下,我最初扩展了它们,直到出现问题,我交换了它们,以便在类需要调用paint()时现在它扩展了一个JPanel,而不是TL DR:我如何处理重新绘制更新列表中的各种对象和刷新游戏系统面板,而不使任何组件(如按钮)消失。是你的问题是的,这代表我是一个重要的大脑屁,感谢你有效地编辑了它,在我的游戏循环中,调用重新绘制,然后通过更新列表重新绘制它们,我想要一个单独的所有按钮列表,并对它们进行相同的处理?最好让Swing通过paintComponent处理重新绘制,因为您使用的是Swing组件,但如果你快到了,只需要它工作,那就应该做到。
Game System
{
    paint loop
    {
        painting Game
    }
}

Components //managing the painting itself through paintComponent, trying to run at same time as Game System.
{
    paintComponent
}