请谁能帮我弄清楚为什么我的图像不会向左或向右移动。
我有一个任务要做,你创建一个小程序,当你按下一个按钮(向上,向下,向左,向右或居中)时,图像将沿该方向移动。
我的图像向上、向下和向中心移动,但不会向左或向右移动
请看下面我的代码
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();
}
}发布于 2014-08-07 05:55:01
有两个错误..。
首先。
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;都会被执行,这意味着对象永远不能向左移动。
如果您希望在一条if语句中执行多个语句,则需要将它们包装在{...}中,这对于您的所有if语句来说确实是一个好主意
if (arg == "Center") {
top = 60;
left = 125;
}已更新...
我还应该讨论使用Applet而不是JApplet或将applets作为教学工具的相关性,但您可能无法对这些决定进行太多控制……
请注意,Applet在15年前已经被JApplet取代,小程序通常比独立程序(使用JFrame)更难开发。
作为一般规则,您应该始终调用super.paint,因为绘制通常是通过将一系列其他方法链接在一起来实现的,这可能会在更新时产生绘制工件。
通常也不鼓励覆盖顶级容器的paint,比如Applet。
https://stackoverflow.com/questions/25170709
复制相似问题