Java未解析的JPanel变量?

时间:2014-03-11 18:34:55

标签: java eclipse

为什么不能将aniPanel解析为变量。我试过了

AniPanel aniPanel = new AniPanel(); 

但这并没有解决问题。我也确保

import java.swing.JPanel

这是班级:

public class Animation {

    public JPanel AniPanel;

    private boolean loop = true;

    private RenderingHints renderingHints = new RenderingHints(
                RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

     @SuppressWarnings("serial")
    class AniPanel extends JPanel {

            public void paintComponent(Graphics g) {

                Graphics2D g2d = (Graphics2D) g;
                g2d.setRenderingHints(renderingHints);
                draw(g2d);
            }
        }

     public static void main(String[] args){

        Circle C = new Circle(100);

        JFrame jf = new JFrame();

        jf.setTitle("Falling Shapes Animation");
        jf.setSize(600,400);

        aniPanel = new AniPanel();
        jf.getContentPane().add(aniPanel);

        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.pack();

    }

1 个答案:

答案 0 :(得分:1)

您的代码存在各种问题。

首先,Java区分大小写。这是你的变量声明:

public JPanel AniPanel;

以下是您尝试使用它的地方:

aniPanel = new AniPanel();

请注意声明中的大写A。此外,您正尝试从静态方法中使用它,因此您需要为其指定实例,或者将其设为静态变量。它应该是:

public static JPanel aniPanel;

...或者最好:

private static JPanel aniPanel;

更好的是,将其设为 local 变量而不是字段 - 无论如何,您只能在main中使用它。所以只需删除当前声明,然后使用:

AniPanel aniPanel = new AniPanel();

然后有一个内部类的问题,这意味着你需要一个Animation的实例才能创建AniPanel的实例。您可以通过将AniPanel设置为静态嵌套类,或者从Animation中删除它(使其成为顶级类)来解决此问题。就个人而言,我建议尽可能避免使用嵌套类 - 特别是如果你对Java比较新的话。您应该完全删除loop变量(您永远不会使用它)并将renderingHints移到AniPanel