今天只是一个简单的问题,我做了JFrame
,当我点击“让我们这样做!”按钮我想将它添加到“Woodcutter”中的数组列表中,这是我的代码,感谢任何帮助。
package org.script.gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.script.Constants;
public class ActionHandler implements ActionListener {
@Override
public void actionPerformed(ActionEvent action) {
switch (action.getActionCommand().toLowerCase()) {
case "let's do this!":
//TODO i want this to be able to change taskList from Woodcutter!
break;
default:
System.out.println(action.getActionCommand().toLowerCase()+" - COMMAND NOT ADDED!");
break;
}
}
}
在一个单独的课程中我有这个:
public List<Task> taskList = new ArrayList<>();
如何在不使ActionHandler
类变为静态的情况下更改taskList的值?感谢。
package org.script;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.JOptionPane;
import org.powerbot.script.PollingScript;
import org.powerbot.script.rt6.ClientContext;
import org.script.gui.ScriptSettings;
import org.script.task.Task;
public class Woodcutter extends PollingScript<ClientContext> {
public List<Task> taskList = new ArrayList<>();
@Override
public void start() {
ScriptSettings.main(null);
}
@Override
public void poll() {
for (Task task : taskList) {
if (task.activate()) {
task.execute();
}
}
}
public void verifyOptions() {
if (Constants.FLETCHING && Constants.BONFIRES) {
sendError("You cant fletch and use bonfires!");
} else if (Constants.BONFIRES && Constants.BANKING) {
sendError("You cant use bonfires and bank!");
} else if (Constants.BANKING && Constants.FLETCHING) {
sendError("You cant bank and fletch!");
} else {
taskList.addAll(Arrays.asList(new Dropper(ctx)));
}
}
private void sendError(String message) {
JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE);
}
}
编辑2 - 即使我确实将其设为静态,我也无法对非静态字段ctx进行静态引用。
答案 0 :(得分:1)
你的ActionHandler应该拥有樵夫类的一个实例。您可以注入依赖项,也可以像我的示例中那样热切地创建依赖项。 woodcutter类应该有一个taskList的get方法,simple方法返回列表。在google上搜索getter和setter方法以获取更多信息。
package org.script.gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.script.Constants;
public class ActionHandler implements ActionListener {
private Woodcutter wc = new Woodcutter();
@Override
public void actionPerformed(ActionEvent action) {
switch (action.getActionCommand().toLowerCase()) {
case "let's do this!":
wc.getTaskList().add(new Task());
break;
default:
System.out.println(action.getActionCommand().toLowerCase()+" - COMMAND NOT ADDED!");
break;
}
}
}