2017-04-03 4 views
0

私は静的な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); 
    } 
} 
} 
+2

を試してみてください - [MCVE] – petehallw

答えて

0

selectListenerのような条件が満たされていません。だから、問題は、静的リストにmodifyableないではありませんが、そのプログラムは、任意のif文を入力していません。

if(cCB.isSelected()) 
    a.selectList.add(0); 
..... 
+0

こんにちは、応答のための感謝を。もう少し精巧にお考えですか? if文が機能していないことを意味しますか? – potatoguy

+0

はい、私はあなたの問題の根本原因だと思います。いくつかのSystem.out.printlnステートメントを 'if'ブロックに追加し、それらが実行されたかどうかテストします –

0

あなたがオブジェクトから静的フィールドを呼んでいます。

代わりの

AnimalGUI a = new AnimalGUI(); <...> a.selectList.add(0);

これを参照してください。すぐに助けを得るの高いチャンスを AnimalGUI.selectList.add(0);

関連する問題