私は静的なArrayList、 "selectList"を "AnimalGUI"クラスで修正しようとしています。Java - 別のクラスのActionListenerを使用して、あるクラスのstatic ArrayListを変更するにはどうすればよいですか?
私はJFrameとそのすべてを別のクラスに実装するため、Java GUIからユーザー入力を受けなければなりません。
別のクラス "HandleGUI"に存在するActionListenerにArrayListを渡すと、この問題が発生します。 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);
}
}
}
を試してみてください - [MCVE] – petehallw