gpt4 book ai didi

java - ActionListener 将变量的当前值重置为默认值

转载 作者:行者123 更新时间:2023-12-01 23:16:53 24 4
gpt4 key购买 nike

我正在开发一个简单游戏的项目,您可以使用按钮(北、东、西、南)前往不同的房间。在我的 gui 的 makeFrame() 方法中,我正在创建面板、按钮等。然后,我将默认房间设置为“hall”,然后 Action 监听器调用方法 goRoom 并将方向和 currentRoom 传递给该方法。 goRoom 方法根据 currentRoom 将 currentRoom 更改为另一个房间。我添加了打印语句来查看它是否有效,到目前为止它工作正常。

每次游戏开始时,默认房间都是大厅。因此,当您单击按钮前往“北”时,将调用northButton,然后我们调用传递方向(北)和默认房间“大厅”的 goRoom 方法(因为游戏刚刚启动并使用默认房间) )。然后房间从大厅变为房间(在方法 goRoom 内)。当我尝试按另一个按钮时,当前房间重置为默认值(大厅)。

我认为 Action 监听器从 makeFrame() 方法获取值,而不是从 goRoom 方法获取更新值。代码如下:

public class StoreGUI extends JFrame
{
public String currentRoom;

public StoreGUI()
{
makeFrame();
}


private void makeFrame()
{
currentRoom = "hall";
....


northButton = new JButton("Go North");
northButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
direction = "north";
goRoom(direction, currentRoom); }
});
toolbar.add(northButton);

westButton ....
southButton ....
eastButton ....

picture.setIcon(new ImageIcon("image/hall.png"));
frame.getContentPane().add(picture);
frame.pack();
frame.setVisible(true);
}

private void goRoom(String direction, String currentRoom)
{
// get current room and check which direction button the user has pressed
if (direction == "north"){
if(currentRoom == "hall"){
// Inserts the image icon and change currentRoom
imgageTitle = "image/stateRoom.png";
currentRoom = "stateRoom";
}
....
}

可能是什么问题?我该如何解决这个问题?我很确定这确实很简单,但我很堆栈。

最佳答案

Java 中的

String 比较是通过 String#equals 而不是 == 完成的。这将比较String的实际文本而不是它的内存引用...

例如,而不是

if (direction == "north") {....

使用

if ("north".equals(direction)) {...

如果您不关心这种情况,您可以使用...

if ("north".equalsIgnoreCase(direction)) {...

话虽如此,您实际上可以使用 enum 来表示方向,这限制了您实际可以传递给 goRoom 的值。

您还可以使用Action定义每个按钮的操作,这也意味着您可以使用它们 Key Bindingsmenus无需重复任何代码...但这只是我...

已更新

你也在掩盖你的值(value)观......

private void goRoom(String direction, String currentRoom)
{
//...
currentRoom = "stateRoom";

更改 currentRoom 的值不会超出该方法的范围。这是因为您实际上并没有更改 String 对象的内容,而是更改了它的内存引用。

相反,要么更改参数的名称,要么干脆不费心传递,因为您已经可以访问同名的实例字段...

private void goRoom(String direction)
{
//...
currentRoom = "stateRoom";

关于java - ActionListener 将变量的当前值重置为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21081128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com