[英]Java - How do I modify static ArrayList in one class with an ActionListener in another class?
我正在尝试在“ AnimalGUI”类中修改静态ArrayList“ selectList”。
我必须通过Java GUI接受用户输入,因此我在另一个类中实现了JFrame以及所有其他功能。
当我将ArrayList传递给另一个类“ HandleGUI”中的ActionListener时遇到了问题。 由于某种原因,ActionListener无法修改静态ArrayList。
我知道它不起作用,因为我想在修改ArrayList的内容后尝试打印它,而系统什么也不打印。
下面是动物GUI类,除了代码底部的ArrayList“ selectList”外,没有什么特别需要关注的。
public class AnimalGUI {
public static void main(String[] args) {
AnimalGUI a = new AnimalGUI();
HandleGUI h = new HandleGUI();
h.initialisation();
a.printSelectList();
}
//Print selectList
void printSelectList(){
for(int x: selectList){
System.out.println(x);
}
}
static ArrayList<Integer> selectList = new ArrayList<Integer>();
static ArrayList<Animal> aniList = new ArrayList<Animal>();
static String[][] Forest = new String[15][15];
}
下面是子类“ HandleGUI”。
您可以忽略大多数Java GUI组件。 这里的重要部分是ActionListener“ selectListener”。
public class HandleGUI{
JFrame menu = new JFrame("Startup Menu");
JPanel panelA = new JPanel();
JCheckBox cCB, dCB, fCB, hCB, lCB, tCB, uCB, wCB;
JButton cBT, dBT, fBT, hBT, lBT, tBT, uBT, wBT, start;
//Constructor
public HandleGUI(){
//Declare all the JCheckBoxes.
cCB = new JCheckBox("Cat");
dCB = new JCheckBox("Dog");
fCB = new JCheckBox("Fox");
hCB = new JCheckBox("Hippo");
lCB = new JCheckBox("Lion");
tCB = new JCheckBox("Tiger");
uCB = new JCheckBox("Turtle");
wCB = new JCheckBox("Wolf");
//Declare all the JButtons.
cBT = new JButton("Pick an alternative icon.");
dBT = new JButton("Pick an alternative icon.");
fBT = new JButton("Pick an alternative icon.");
hBT = new JButton("Pick an alternative icon.");
lBT = new JButton("Pick an alternative icon.");
tBT = new JButton("Pick an alternative icon.");
uBT = new JButton("Pick an alternative icon.");
wBT = new JButton("Pick an alternative icon.");
start = new JButton("Start");
//Declare JFrame and set its size.
//Make the startup menu display in centre of monitor.
menu.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
menu.setSize(300, 300);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
menu.setLocation(dim.width/2-menu.getSize().width/2, dim.height/2-menu.getSize().height/2);
}
//Generates a setup menu that allows user to select animals to be included in the simulation.
public void initialisation(){
//Make the startup menu display in centre of monitor.
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
menu.setLocation(dim.width/2-menu.getSize().width/2, dim.height/2-menu.getSize().height/2);
//Set the JPanel to grid layout so elements on both columns align.
panelA.setLayout(new GridLayout(8, 2, 5, 5));
//Add the elements into JPanel.
panelA.add(cCB);
panelA.add(cBT);
panelA.add(dCB);
panelA.add(dBT);
panelA.add(fCB);
panelA.add(fBT);
panelA.add(hCB);
panelA.add(hBT);
panelA.add(lCB);
panelA.add(lBT);
panelA.add(tCB);
panelA.add(tBT);
panelA.add(uCB);
panelA.add(uBT);
panelA.add(wCB);
panelA.add(wBT);
//Add the Panel to the Frame.
menu.getContentPane().add(panelA, BorderLayout.CENTER);
menu.getContentPane().add(start, BorderLayout.SOUTH);
//Make Frame visible.
menu.setVisible(true);
start.addActionListener(new selectListener());
}
class selectListener implements ActionListener{
public void actionPerformed(ActionEvent e){
AnimalGUI a = new AnimalGUI();
if(cCB.isSelected())
a.selectList.add(0);
if(dCB.isSelected())
a.selectList.add(1);
if(fCB.isSelected())
a.selectList.add(2);
if(hCB.isSelected())
a.selectList.add(3);
if(lCB.isSelected())
a.selectList.add(4);
if(tCB.isSelected())
a.selectList.add(5);
if(uCB.isSelected())
a.selectList.add(6);
if(wCB.isSelected())
a.selectList.add(7);
menu.setVisible(false);
}
}
}
看起来您的selectListener
中的条件未满足。 因此,问题不在静态列表中不可修改,但该程序未输入任何if
语句:
if(cCB.isSelected())
a.selectList.add(0);
.....
您正在从对象调用静态字段。
代替
AnimalGUI a = new AnimalGUI(); <...> a.selectList.add(0);
试试AnimalGUI.selectList.add(0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.