为什么aniPanel
不能解析为变量。我已经尝试过
AniPanel aniPanel = new AniPanel();
但这并不能解决问题。我也确保
导入java.swing.JPanel
这是类(class):
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();
}
最佳答案
您的代码存在多种问题。
首先,Java 区分大小写。这是您的变量声明:
public JPanel AniPanel;
这是您尝试使用它的地方:
aniPanel = new AniPanel();
注意声明中的大写A
。此外,您尝试从静态方法中使用它,因此您要么需要为其指定一个实例,要么将其设置为静态变量。应该是:
public static JPanel aniPanel;
...或者最好是:
private static JPanel aniPanel;
更好的是,将其设为本地变量而不是字段 - 无论如何,您只能在main
中使用它。因此,只需删除当前声明,然后使用:
AniPanel aniPanel = new AniPanel();
您将遇到问题,它是一个内部类,这意味着您需要 Animation
的实例才能创建 AniPanel< 的实例
。您可以通过将 AniPanel
设为静态嵌套类,或从 Animation
中删除它(使其成为顶级类)来解决此问题。就我个人而言,我建议尽可能避免嵌套类 - 特别是如果您对 Java 比较陌生。您应该完全删除 loop
变量(您从不使用它)并将 renderingHints
移至 AniPanel
中。
关于Java未解析的JPanel变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22333654/