MoveIt小程序图像在画布上不向左和向右移动

时间:2014-08-06 21:41:07

标签: java applet

请有人帮我弄清楚为什么我的影像不会向左或向右移动。

我有一项任务,你可以在创建小程序的地方按下按钮(向上,向下,向左,向右或向中),图像将朝那个方向移动。

我的图像向上,向下移动到中心但不会向左或向右移动

请参阅下面的我的编码

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class MoveIt extends Applet implements ActionListener
{
  private Image cup;
  private Panel keypad;
  public int top = 15;
  public int left = 15;
  private Button keysArray[];

public void init()
{
    cup = getImage(getDocumentBase(), "cup.gif");
    Canvas myCanvas = new Canvas();
    keypad = new Panel();

    Button up = new Button("Up");
    Button left = new Button("Left");
    Button right = new Button("Right");
    Button down = new Button("Down");
    Button center = new Button("Center");

    setBackground(Color.blue);

    setLayout(new BorderLayout());
    keypad.setLayout(new BorderLayout());


    keypad.add(up, BorderLayout.NORTH);
    keypad.add(down, BorderLayout.SOUTH);
    keypad.add(right, BorderLayout.EAST);
    keypad.add(left, BorderLayout.WEST);
    keypad.add(center, BorderLayout.CENTER);

    add(myCanvas, BorderLayout.NORTH);
    add(keypad, BorderLayout.SOUTH);


    up.addActionListener(this);
    down.addActionListener(this);
    right.addActionListener(this);
    left.addActionListener(this);
    center.addActionListener(this);
 }

    public void paint(Graphics g)
    {
        g.drawImage(cup, left, top, this);
    }

    public void actionPerformed(ActionEvent e)
        {
            String arg = e.getActionCommand();

            if (arg == "Up")
            top = top - 15;

            if (arg == "Down")
            top = top + 15;

            if (arg == "Left")
            left = left - 15;

            if (arg == "Right")
            left = left + 15;

            if (arg == "Center")
            top = 60;
            left = 125;

        repaint();
    }

}

1 个答案:

答案 0 :(得分:1)

有两个错误......

首先...

arg == "Up"

不是你在Jave中进行String比较的方式,而是你应该使用String.equals,例如......

"Up".equals(arg)

查看How do I compare strings in Java?了解更多详情......

其次

您正尝试在if条件下执行两项操作,但只执行了第一个satememt ...

if (arg == "Center")
    top = 60;
    left = 125;

这里的问题是left = 125;总是会被执行,无论你按下哪个按钮,wch意味着对象不能向左移动。

如果您希望在if语句中执行多个语句,则需要将它们包含在{...}中,这对于您的所有if语句来说真是个好主意

if (arg == "Center") {
    top = 60;
    left = 125;
}

<强>更新...

我还应该讨论使用Applet而不是JApplet或使用applet作为教学工具的相关性,但是你可能无法控制这些决定......

请注意,15年前Applet已被JApplet取代,并且applet通常比单独的程序(使用JFrame)更难开发。

作为一般规则,您应该始终调用super.paint,因为绘制通常是通过将一系列其他方法链接在一起来实现的,这可能会在更新时产生绘制工件。

通常也不鼓励覆盖paint等顶级容器,例如Applet