请有人帮我弄清楚为什么我的影像不会向左或向右移动。
我有一项任务,你可以在创建小程序的地方按下按钮(向上,向下,向左,向右或向中),图像将朝那个方向移动。
我的图像向上,向下移动到中心但不会向左或向右移动
请参阅下面的我的编码
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();
}
}
答案 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
。