我目前,为了好玩更改布尔值,使得乒乓球比赛但是我目前被困尝试通过w键按下,让我的布尔“goingup”的真实状态的值。我有我的渲染类中的布尔值,以及int x和int y,并设置为false。在这个类中,我画了一个正方形,其中x为int x,y为int y。在另一个类(Framemake.java)中,我有一个关键侦听器设置为我的Jframe。在这堂课中,我有keylistener倾听w键的按键和释放。这里是我的问题就出现了:如果W键被按下我希望它goingup更改为true,如果它的发布我希望它改变上升为false;这工作得很好,但问题是在我的呈现类我有设置一个计时器,这是然后在图形方式(不知道正确的名称)开始。在定时器执行的操作中,我已经设定:如果上升是真的,我希望它打印出“上升是真实的 - 渲染”。这是问题所在 - 即使由于按键被按下而导致上升,打印也不会被打印到屏幕上。 (三江源读这篇文章,我需要你怎么回事导通,即使它可能是也可能不是真的很明显完全理解)。爪哇 - 在一个类从另一个类
下面是代码: Starter.java
public class Starter {
public static void main(String[] args) {
Frame frame = new Frame();
frame.Start();
}
}
这里是Frame.java Render.java的
public class Frame implements Runnable {
Framemake r = new Framemake();
public void Start(){
new Thread(this).start();//
}
public void run() {
try {
r.framemade();
}
catch (Exception e) { //
e.printStackTrace();
}
}
}
这里是作为份我是有麻烦粘贴到该交
public class Render extends JPanel implements ActionListener {
boolean goingup = false;
boolean goingdown = false;
int x = 0; //starting pos of x .
int y = 150;//starting pos of y
Timer tm = new Timer(7, this); //The timer is created
public void paintComponent(Graphics g) {
Framemake frames = new Framemake();
super.paintComponent(g);
tm.start();
g.setColor(Color.GREEN);
g.fillRect(x, y, 20, 150);
g.dispose();
}
public void actionPerformed(ActionEvent e){ //timer
if(goingup){
System.out.println("Going up is true- render");
x++;//for example...
repaint();
}
}
这里是Framemake.java
public class Framemake implements KeyListener {
int WIDTH = 500;
int HEIGHT = 500;
Render c = new Render();
public void framemade() {
System.out.println("Frame starting");
//Frame is created here
Render render = new Render();
JFrame frame = new JFrame();
frame.setSize(WIDTH, HEIGHT);
frame.setVisible(true);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setTitle("Animation");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Window w = frame;
w.addKeyListener(this);
frame.add(render); //displays all graphics from render to the screen
}
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_W) {
System.out.println("Going up");
c.goingup = true;
}
if (keyCode == KeyEvent.VK_S) {
System.out.println("Going down");
c.goingdown = true;
}
}
public void keyReleased(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_W) {
System.out.println("Up terminated");
c.goingup = false;
}
if (keyCode == KeyEvent.VK_S) {
System.out.println("Down terminated");
c.goingdown = false;
}
}
public void keyTyped(KeyEvent e) {}
}
我希望这里的问题很明确(对不起,如果我错误地发布了我的代码),任何帮助表示赞赏。
+1因为我实际上错过了。这确实是问题! –
谢谢大家的非常快速的回复 - 感谢它,现在完美:)。 – arunptl100
@ arunptl100它看起来像你已经弄清楚了。欢迎来到StackOverflow! – Christian