最终 var 更改值 JAVA
final var changes value JAVA
我不明白为什么我将 HEIGHT 和 WEIGHT 初始化为 32,在 Window() 中没问题,但在内部 class GamePanel 中它的值为 1 和 2,顺便说一句,SCALE 是 20在 Window()
public class Window extends JFrame {
private final int SCALE;
private final int WIDTH;
private final int HEIGHT;
public Window()
{
super("Snake");
SCALE=20;
WIDTH=32;
HEIGHT=32;
setSize(new Dimension(SCALE*WIDTH,SCALE*HEIGHT));
setLocation(getWidth()/2,0);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GamePanel gamePanel = new GamePanel();
setContentPane(gamePanel);
setVisible(true);
}
private class GamePanel extends JPanel {
@Override
public void paint(Graphics g) {
g.setColor(Color.BLACK);
g.fillRect(0,0,getWidth(),getHeight());
drawGrid(g);
System.out.println(SCALE);
System.out.println(WIDTH);
System.out.println(HEIGHT);
}
public void drawGrid(Graphics g)
{
//
}
}
}
WIDTH 和 HEIGHT 变量不属于您的 Window class。它们来自 java.awt.Image.ImageObserver 界面。
这里是我提到的界面内容
package java.awt.image;
import java.awt.Image;
public interface ImageObserver {
public static final int WIDTH = 1;
public static final int HEIGHT = 2;
public static final int PROPERTIES = 4;
public static final int SOMEBITS = 8;
public static final int FRAMEBITS = 16;
public static final int ALLBITS = 32;
public static final int ERROR = 64;
public static final int ABORT = 128;
public boolean imageUpdate(Image image, int i, int i1, int i2, int i3, int i4);
}
你什么时候:
private class GamePanel 扩展 JPanel
您正在扩展 JPanel,因此您也继承了它的所有 public/protected/package 变量。如果检查所有继承树:
JPanel <- JComponent <- 容器 <- 组件 <- ImageObserver
如果您查看 ImageObserver 源代码,您会发现:
public static final int WIDTH = 1;
public static final int HEIGHT = 2;
因为继承的变量优先于外部class。这就是显示的值。
因此考虑将它们作为参数传递以获得正确的值。
我不明白为什么我将 HEIGHT 和 WEIGHT 初始化为 32,在 Window() 中没问题,但在内部 class GamePanel 中它的值为 1 和 2,顺便说一句,SCALE 是 20在 Window()
public class Window extends JFrame {
private final int SCALE;
private final int WIDTH;
private final int HEIGHT;
public Window()
{
super("Snake");
SCALE=20;
WIDTH=32;
HEIGHT=32;
setSize(new Dimension(SCALE*WIDTH,SCALE*HEIGHT));
setLocation(getWidth()/2,0);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GamePanel gamePanel = new GamePanel();
setContentPane(gamePanel);
setVisible(true);
}
private class GamePanel extends JPanel {
@Override
public void paint(Graphics g) {
g.setColor(Color.BLACK);
g.fillRect(0,0,getWidth(),getHeight());
drawGrid(g);
System.out.println(SCALE);
System.out.println(WIDTH);
System.out.println(HEIGHT);
}
public void drawGrid(Graphics g)
{
//
}
}
}
WIDTH 和 HEIGHT 变量不属于您的 Window class。它们来自 java.awt.Image.ImageObserver 界面。
这里是我提到的界面内容
package java.awt.image;
import java.awt.Image;
public interface ImageObserver {
public static final int WIDTH = 1;
public static final int HEIGHT = 2;
public static final int PROPERTIES = 4;
public static final int SOMEBITS = 8;
public static final int FRAMEBITS = 16;
public static final int ALLBITS = 32;
public static final int ERROR = 64;
public static final int ABORT = 128;
public boolean imageUpdate(Image image, int i, int i1, int i2, int i3, int i4);
}
你什么时候: private class GamePanel 扩展 JPanel
您正在扩展 JPanel,因此您也继承了它的所有 public/protected/package 变量。如果检查所有继承树:
JPanel <- JComponent <- 容器 <- 组件 <- ImageObserver
如果您查看 ImageObserver 源代码,您会发现:
public static final int WIDTH = 1;
public static final int HEIGHT = 2;
因为继承的变量优先于外部class。这就是显示的值。
因此考虑将它们作为参数传递以获得正确的值。