当我按下我的键时,我想要更新我的矩形我几乎已经实现了
package com.raggaer.frame;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
public class Elements extends JPanel {
private static int y = 250;
public Elements() {
this.getInputMap().put(KeyStroke.getKeyStroke("UP"), "up");
this.getActionMap().put("up", new Listener("up"));
this.getInputMap().put(KeyStroke.getKeyStroke("DOWN"), "down");
this.getActionMap().put("down", new Listener("down"));
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(250, this.y, 10, 10);
}
public Dimension getPreferredSize() {
return new Dimension(500, 500);
}
public static void setY(int cord) {
y += cord;
// Cant access repaint()
}
}
这是我的听众课
package com.raggaer.frame;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.AbstractAction;
public class Listener extends AbstractAction {
private String code;
//final Elements game = new Elements();
public Listener(String order) {
this.code = order;
}
public void actionPerformed(ActionEvent e) {
System.out.println(this.code);
Elements.setY(1);
}
}
目前一切正常,除了我不知道如何更新矩形的y位置,我尝试使用静态变量,但后来我不能调用repaint()方法。
答案 0 :(得分:1)
不,....不要使用静态任何东西,既不使用方法也不使用字段,因为如果你这样做,你将破坏面向对象的编程规则,使你的代码难以更新和维护。当然例外是您的主要方法,以及精心选择的真正属于该类的字段和方法。相反,为需要调用Element对象方法的类提供对您希望更改其状态的对象的有效引用,即绘图JPanel或Element对象。这可以通过构造函数参数传入有效引用来完成。
public class Listener extends AbstractAction {
private Elements elements;
public Listener(Elements elements) {
this.elements = elements;
}