【发布时间】:2017-04-03 20:41:21
【问题描述】:
我正在尝试修改“AnimalGUI”类中的静态 ArrayList“selectList”。
我必须通过 Java GUI 接受用户输入,所以我在另一个类中实现了 JFrame 和所有这些。
当我将 ArrayList 传递给存在于不同类“HandleGUI”中的 ActionListener 时遇到问题。 ActionListener 由于某种原因无法修改静态 ArrayList。
我知道它不起作用,因为我试图在修改后打印 ArrayList 的内容,但系统什么也没打印。
下面是类Animal 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);
}
}
}
【问题讨论】:
-
如需更快获得帮助的机会,请参阅此 - minimal reproducible example
标签: java user-interface arraylist static actionlistener