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 使用jframe的多个jComponents动画_Java_Swing_Animation - Fatal编程技术网

Java 使用jframe的多个jComponents动画

Java 使用jframe的多个jComponents动画,java,swing,animation,Java,Swing,Animation,我无法在花园网格面板的顶部显示动画。最后添加到显示的contentpane中的。是否仍然可以同时显示多个组件。我尝试过切换动画类和花园网格类来扩展jpanel,但没有任何效果。动画是一系列图像,显示使用鼠标拖动角色时角色的移动。我需要那个角色移动到花园网格面板的顶部。有什么帮助吗 package view; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.a

我无法在花园网格面板的顶部显示动画。最后添加到显示的contentpane中的。是否仍然可以同时显示多个组件。我尝试过切换动画类和花园网格类来扩展jpanel,但没有任何效果。动画是一系列图像,显示使用鼠标拖动角色时角色的移动。我需要那个角色移动到花园网格面板的顶部。有什么帮助吗

  package view;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridBagLayout;
import java.awt.Panel;

import javax.swing.JFrame;
import javax.swing.JLayeredPane;


public class Driver {
public static void main(String[] args) {

    JFrame frame = new JFrame();
   JLayeredPane pane = new JLayeredPane();
   frame.add(pane);

   Animation animation = new Animation();
   GardenPanel garden = new GardenPanel(6,4,600,800);


   pane.add(animation,new Integer(1));

   pane.add(garden, new Integer(0));
    frame.setSize(800, 600);


    System.out.println(pane.highestLayer());// just to check I dont have hidden layers







    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

    while(true){
        frame.repaint();
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

}

--------动画课-----------

你应该看到一个移动的兽人。你可以用鼠标拖动兽人。如果你按 *如果不移动鼠标,功率将增加。 * */

你说:

我无法在花园网格面板的顶部显示动画。最后添加到显示的contentpane中的

JFrame的内容窗格使用BorderLayout,这就是BorderLayouts的工作原理。如果默认情况下添加组件(不带int 2nd参数),则默认情况下会将其放置在BorderLayout.CENTER位置,并覆盖先前添加的任何内容。您需要阅读Swing布局管理器教程,以了解有关这方面的更多详细信息

是否仍然可以同时显示多个组件

可以,使用不同的布局管理器和组件。如果您希望组件顶部彼此,请考虑使用JLAIERDEPAN。

我尝试过切换动画类和花园网格类来扩展jpanel,但没有任何效果。动画是一系列图像,显示使用鼠标拖动角色时角色的移动。我需要那个角色移动到花园网格面板的顶部。有什么帮助吗

  package view;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridBagLayout;
import java.awt.Panel;

import javax.swing.JFrame;
import javax.swing.JLayeredPane;


public class Driver {
public static void main(String[] args) {

    JFrame frame = new JFrame();
   JLayeredPane pane = new JLayeredPane();
   frame.add(pane);

   Animation animation = new Animation();
   GardenPanel garden = new GardenPanel(6,4,600,800);


   pane.add(animation,new Integer(1));

   pane.add(garden, new Integer(0));
    frame.setSize(800, 600);


    System.out.println(pane.highestLayer());// just to check I dont have hidden layers







    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

    while(true){
        frame.repaint();
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
不确定您的确切问题是什么。

您陈述:

我无法在花园网格面板的顶部显示动画。最后添加到显示的contentpane中的

JFrame的内容窗格使用BorderLayout,这就是BorderLayouts的工作原理。如果默认情况下添加组件(不带int 2nd参数),则默认情况下会将其放置在BorderLayout.CENTER位置,并覆盖先前添加的任何内容。您需要阅读Swing布局管理器教程,以了解有关这方面的更多详细信息

是否仍然可以同时显示多个组件

可以,使用不同的布局管理器和组件。如果您希望组件顶部彼此,请考虑使用JLAIERDEPAN。

我尝试过切换动画类和花园网格类来扩展jpanel,但没有任何效果。动画是一系列图像,显示使用鼠标拖动角色时角色的移动。我需要那个角色移动到花园网格面板的顶部。有什么帮助吗

  package view;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridBagLayout;
import java.awt.Panel;

import javax.swing.JFrame;
import javax.swing.JLayeredPane;


public class Driver {
public static void main(String[] args) {

    JFrame frame = new JFrame();
   JLayeredPane pane = new JLayeredPane();
   frame.add(pane);

   Animation animation = new Animation();
   GardenPanel garden = new GardenPanel(6,4,600,800);


   pane.add(animation,new Integer(1));

   pane.add(garden, new Integer(0));
    frame.setSize(800, 600);


    System.out.println(pane.highestLayer());// just to check I dont have hidden layers







    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

    while(true){
        frame.repaint();
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
不确定您的确切问题是什么。

您陈述:

我无法在花园网格面板的顶部显示动画。最后添加到显示的contentpane中的

JFrame的内容窗格使用BorderLayout,这就是BorderLayouts的工作原理。如果默认情况下添加组件(不带int 2nd参数),则默认情况下会将其放置在BorderLayout.CENTER位置,并覆盖先前添加的任何内容。您需要阅读Swing布局管理器教程,以了解有关这方面的更多详细信息

是否仍然可以同时显示多个组件

可以,使用不同的布局管理器和组件。如果您希望组件顶部彼此,请考虑使用JLAIERDEPAN。

我尝试过切换动画类和花园网格类来扩展jpanel,但没有任何效果。动画是一系列图像,显示使用鼠标拖动角色时角色的移动。我需要那个角色移动到花园网格面板的顶部。有什么帮助吗

  package view;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridBagLayout;
import java.awt.Panel;

import javax.swing.JFrame;
import javax.swing.JLayeredPane;


public class Driver {
public static void main(String[] args) {

    JFrame frame = new JFrame();
   JLayeredPane pane = new JLayeredPane();
   frame.add(pane);

   Animation animation = new Animation();
   GardenPanel garden = new GardenPanel(6,4,600,800);


   pane.add(animation,new Integer(1));

   pane.add(garden, new Integer(0));
    frame.setSize(800, 600);


    System.out.println(pane.highestLayer());// just to check I dont have hidden layers







    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

    while(true){
        frame.repaint();
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
不确定您的确切问题是什么。

您陈述:

我无法在花园网格面板的顶部显示动画。最后添加到显示的contentpane中的

JFrame的内容窗格使用BorderLayout,这就是BorderLayouts的工作原理。如果默认情况下添加组件(不带int 2nd参数),则默认情况下会将其放置在BorderLayout.CENTER位置,并覆盖先前添加的任何内容。您需要阅读Swing布局管理器教程,以了解有关这方面的更多详细信息

是否仍然可以同时显示多个组件

可以,使用不同的布局管理器和组件。如果您希望组件顶部彼此,请考虑使用JLAIERDEPAN。

我尝试过切换动画类和花园网格类来扩展jpanel,但没有任何效果。动画是一系列图像,显示使用鼠标拖动角色时角色的移动。我需要那个角色移动到花园网格面板的顶部。有什么帮助吗

  package view;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridBagLayout;
import java.awt.Panel;

import javax.swing.JFrame;
import javax.swing.JLayeredPane;


public class Driver {
public static void main(String[] args) {

    JFrame frame = new JFrame();
   JLayeredPane pane = new JLayeredPane();
   frame.add(pane);

   Animation animation = new Animation();
   GardenPanel garden = new GardenPanel(6,4,600,800);


   pane.add(animation,new Integer(1));

   pane.add(garden, new Integer(0));
    frame.setSize(800, 600);


    System.out.println(pane.highestLayer());// just to check I dont have hidden layers







    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

    while(true){
        frame.repaint();
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

不确定您的确切问题是什么。

有两种方法可以使动画位于花园面板的顶部。 然而正如“满是鳗鱼的气垫船”所指出的,如何使用“GridBagLayout”存在一些问题

在处理动画时,我倾向于使用绝对定位,通过这种方式很容易手动指定组件的确切位置,并且可以确保所有内容都是可见的。为此,我将jLayeredPane/jPanel添加到jFrame中,并向其中添加组件,而不是jFrame

这里有两种方法可以使动画位于GardenPanel的顶部

1) 按不同的顺序添加组件以获得不同的结果。试试看

2) 将所有组件添加到“ContentPane”后,可以在顶部设置所需组件的Z顺序,如下所示:

//Create this object first so we can set the Z-Order later
Animation animation = new Animation()
frame.getContentPane().add(animation); //use object above, not a "new" Animation
frame.getContentPane().add(new GardenPanel(6,4,600,800));
//Do something like this after all other components have been added to the ContentPane.
frame.getContentPane().setComponentZOrder(animation, 0);

编辑: 从您展示的内容中,您已经掌握了基本知识,因此这里有一个您可以编译的自包含示例,我相信它演示了您想要做的事情

动画
由红色框表示,
园丁面板
由b