我不知道我是否遗漏了一些非常基本的东西,但我有一个静态方法返回一个静态整数,我试图分配给一个不同的静态整数。我的代码是静态的,因为它可以得到但我不断收到错误告诉我,"无法从类型KeyboardInput"中对非静态方法getX()进行静态引用。 (方法和类的名称只是为了清楚说明)它告诉我解决方案是使方法保持静态,但它已经完全丢失了。
以下是代码:
使用该方法的类 -
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Window extends JFrame{
JPanel panel;
ImageIcon imgIcon;
JLabel label;
private static int xLoc = KeyboardInput.getX(); // errors on this line
private static int yLoc = KeyboardInput.getY(); // and errors on this line
public Window(String name){
super(name);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
//addKeyListener(new KeyboardInput());
panel = new JPanel();
imgIcon = new ImageIcon("rorschach.jpg");
label = new JLabel(imgIcon);
label.setLocation(xLoc, yLoc);
label.setSize(50,50);
panel.add(label);
add(panel);
setVisible(true);
}
}
制作方法的类 -
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.Timer;
public class KeyboardInput implements KeyListener, ActionListener {
private boolean goUp = false;
private boolean goDown = false;
private boolean goLeft = false;
private boolean goRight = false;
private static int x = 0;
private static int y = 0;
public static int getX(){
return x;
}
public static int getY(){
return y;
}
Timer timer;
public KeyboardInput(){
timer = new Timer(100, this);
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_W) {
goUp = true;
}
if (e.getKeyCode() == KeyEvent.VK_S) {
goDown = true;
}
if (e.getKeyCode() == KeyEvent.VK_A) {
goLeft = true;
}
if (e.getKeyCode() == KeyEvent.VK_D) {
goRight = true;
}
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_W) {
goUp = false;
}
if (e.getKeyCode() == KeyEvent.VK_S) {
goDown = false;
}
if (e.getKeyCode() == KeyEvent.VK_A) {
goLeft = false;
}
if (e.getKeyCode() == KeyEvent.VK_D) {
goRight = false;
}
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void actionPerformed(ActionEvent e) {
if (goUp) {
y -= 5;
}
if (goDown) {
y += 5;
}
if (goLeft) {
x -= 5;
}
if (goRight) {
x += 5;
}
if (goUp && goDown) {
y += 5;
}
if (goLeft && goRight) {
x += 5;
}
}
}
这个项目显然没有完成,但我不相信我此时会遇到这些错误,希望能解决这个问题。
提前致谢!
答案 0 :(得分:0)
我猜你不需要以下几行中的静态词:
private static int xLoc = KeyboardInput.getX(); // errors on this line
private static int yLoc = KeyboardInput.getY();
答案 1 :(得分:0)
不是答案,但我无法在评论中格式化代码。
这看起来非常糟糕:
public class Window extends JFrame{
...
private static int xLoc = ...;
private static int yLoc = ...;
public Window(String name) { ... }
...
}
您已经定义了一个允许您创建Window
个实例的构造函数。
Window
个实例具有名称并且它们扩展JFrame这一事实看起来非常像是邀请多个实例,但每个Window
实例共享相同的xLoc
和yLoc
以及其他Window
个实例。
这有什么意义呢?