0

所以我有一个动画课和一个花园板课。我需要动画 jcomponent 出现在花园面板 jcomponent 的顶部。我想我会使用 jlayeredpane 来帮助我实现这一目标,但到目前为止,我得到的只是我设置为绿色的背景。我想如果我将 jlayeredpane 添加到框架中,然后只将组件添加到 jlayered 窗格中,那么我将能够在花园面板顶部看到动画,但事实并非如此,所以现在我被卡住了。有什么帮助吗?这是我的课程,其中包含主要内容:

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();
        Color c = new Color(0, 255, 0);
        frame.setSize(800, 600);
        frame.setBackground(c);
        frame.getContentPane().add(pane);
        Animation animation = new Animation();
        pane.add(animation);
        pane.add(new GardenPanel(6, 4, 600, 800));
        pane.setComponentZOrder(animation, 0);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        while (true) {
            frame.repaint();
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
4

1 回答 1

0

第一:您的以下代码应该做什么?:

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

使用while(true)循环循环和更新你的 gui 100 ms!!。您需要了解 Swing 的单线程规则、事件调度线程和SwingUtilities.invokeLater.

检查此答案以获取详细信息和参考。

编辑:正如以下评论中所建议的那样:

JLayeredPane还与LayoutManager其他类似JComponent。但是在创建时,它AbsoluteLayout默认使用setLayout(null). 所以任何添加到layeredPane实例的组件都应该有setBound(x, y, width, height). 如果您已经这样做了,请检查layeredPane.add(component, new Integer(index))以控制 z-index。

于 2013-10-29T21:20:54.957 回答