2017-04-03 9 views
0

Ich versuche, eine statische ArrayList "selectList" in der Klasse "AnimalGUI" zu ändern.Java - Wie ändere ich statische ArrayList in einer Klasse mit einem ActionListener in einer anderen Klasse?

Ich muss Benutzereingaben über Java GUI nehmen, also habe ich JFrame und all das in einer anderen Klasse implementiert.

Ich stoße auf das Problem, wenn ich die ArrayList an einen ActionListener übergeben, der in einer anderen Klasse existiert, "HandleGUI". Der ActionListener kann die statische ArrayList aus irgendeinem Grund nicht ändern.

Ich weiß, dass es nicht funktioniert, weil ich versucht habe, den Inhalt der ArrayList zu drucken, nachdem, angeblich, modifiziert und das System nichts gedruckt hat.

Unten ist die Klasse Animal GUI, nichts Besonderes neben der ArrayList "selectList" am unteren Rand des Codes zu konzentrieren.

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]; 
} 

Unten ist die Unterklasse "HandleGUI".

Sie können die meisten Java-GUI-Komponenten ignorieren. Der wichtige Teil ist hier der 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

Für eine höhere Chance, Hilfe zu bekommen schnell finden Sie in diesem - [MCVE] – petehallw

Antwort

0

Sieht aus wie Bedingungen in Ihrem selectListener nicht erfüllt sind. So ist das Problem nicht in der statischen Liste nicht modifizierbar, aber das Programm nicht geben Sie eine if Aussage:

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

Hallo, danke für die Antwort. Macht es Ihnen etwas aus, ein bisschen mehr auszuarbeiten? Meinst du, dass die if-Anweisung nicht funktioniert? – potatoguy

+0

Ja, ich nehme an, dass es die Ursache Ihres Problems ist. Fügen Sie eine System.out.println-Anweisung in 'if'-Blöcke hinzu und testen Sie, dass sie ausgeführt werden –

0

Sie rufen statische Felder von Objekten.

Statt

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

Versuchen AnimalGUI.selectList.add(0);

Verwandte Themen