Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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 使用JLayeredFrame动态设置JFrame动画_Java_Swing_Graphics_Jpanel_Jlayeredpane - Fatal编程技术网

Java 使用JLayeredFrame动态设置JFrame动画

Java 使用JLayeredFrame动态设置JFrame动画,java,swing,graphics,jpanel,jlayeredpane,Java,Swing,Graphics,Jpanel,Jlayeredpane,我试图让动画的基本功能发挥作用。我以前在一个RPG项目中使用过它,但现在有点不同了,因为我使用了几个JComponents,由JPanel和一个JLayeredPane组织。我的问题是让“重画”工作起来。我有一个for循环,如代码底部所示,我尝试稍微更改LegsComponent,然后将其添加到JPane->JLayeredPane->JFrame。但由于某些原因,LegsComponent没有出现。你有什么建议吗?谢谢大家! import javax.swing.JFrame; import

我试图让动画的基本功能发挥作用。我以前在一个RPG项目中使用过它,但现在有点不同了,因为我使用了几个JComponents,由JPanel和一个JLayeredPane组织。我的问题是让“重画”工作起来。我有一个for循环,如代码底部所示,我尝试稍微更改LegsComponent,然后将其添加到JPane->JLayeredPane->JFrame。但由于某些原因,LegsComponent没有出现。你有什么建议吗?谢谢大家!

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.*;
import java.awt.Dimension;

public class Main
{
    public static void go()
    {
    JFrame fr = new JFrame();
    JLayeredPane lpane = new JLayeredPane();
    JPanel p = new JPanel();
    JPanel p2 = new JPanel();
    JPanel p3 = new JPanel();

    int size = 120;

    p.setSize(500, 500);
    p.setLayout(new BoxLayout(p, BoxLayout.PAGE_AXIS));

    p2.setSize(500, 500);
    p2.setLayout(new BoxLayout(p2, BoxLayout.PAGE_AXIS));
    p2.setOpaque(false);

    p3.setSize(500, 500);
    p3.setLayout(new BoxLayout(p3, BoxLayout.PAGE_AXIS));
    p3.setOpaque(false);

    final int frHEIGHT = 500;
    final int frWIDTH = 500;

    fr.setSize(frWIDTH, frHEIGHT);

    BodyComponent bC = new BodyComponent(frWIDTH, frHEIGHT, size);
    BackgroundComponent bkC = new BackgroundComponent(frWIDTH, frHEIGHT, size);

    //initializing LegComponent params
    double x = frWIDTH/3;
    double y = frHEIGHT/2;
    double setX = x+size/2;
    double setY = y+size/2;

    LegsComponent lC = new LegsComponent(x, y, size, setX, setY);

    p.add(bkC);
    p2.add(bC);
    p3.add(lC);

    lpane.setBounds(0, 0, 500, 500);

    lpane.add(p, new Integer(0));
    lpane.add(p2, new Integer(2));
    lpane.add(p3, new Integer(1));

    fr.getContentPane().add(lpane);
    fr.setVisible(true);

    for (int i = 45; i > 0; i--){
        JPanel P3 = new JPanel();
        JLayeredPane lPane = new JLayeredPane();
        double n = .01111*i;

        lPane.removeAll();

        LegsComponent lC2 = new LegsComponent(x+n, y+n, size, setX, setY);

        fr.getContentPane().removeAll();

        P3.add(lC2);
        P3.setOpaque(false);

        lPane.add(p, new Integer(0));
        lPane.add(p2, new Integer(2));
        lPane.add(P3, new Integer(1));

        fr.getContentPane().add(lPane);

        fr.setVisible(true);

        Tools.pause(100);
    }
}
}

简单的回答是为什么要使用组件?你为什么不使用定制绘画?接下来,您将与布局管理器进行斗争,这永远不会有好的结局。接下来,您将面临阻塞事件调度线程的风险,这将阻止UI更新。一般来说,您的想法是不可取的,而且,我看不出
lPane.removeAll()有什么意义,当你刚刚创建了一个新的实例并将其添加到框架中时……哦,如果你没有在EDT的上下文中运行你的代码,那么你就违反了API的单线程特性,这可能会生成各种令人讨厌的绘制工件,提供一个演示你的问题的框架。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。这将减少混乱和更好的响应