2016-04-27 17 views
0

Ich habe eine Klasse namens Rahmen, die JFrame erweitert und implementiert Action und wenn:Ausgabe mit Konstruktoraufruf oder JFrame

if(e.getSource() == addSpell){ 
      ArrayList<Spell> temp = new ArrayList<Spell>(); 
      for(Spell spell: SpellList.getSpellList()){ 
       if(spell.getType().equals(user.getType())){ 
       temp.add(spell); 
       } 

      new SpellArraySorter(temp, this); 
      this.setVisible(false); 
    } 

heißt, entweder neue SpellArraySorter() 6 mal aufgerufen wird, oder der Konstruktor erstellt 6 jFrames .

public class SpellArraySorter implements ActionListener{ 

private JButton help; 
private JButton enter; 
private JFrame frame; 
private JTextField level; 
private JTextField levelfill; 
private JTextField name; 
private JTextField namefill; 
private JTextField dmg1; 
private JTextField dmg2; 
private JTextField dmgfill1; 
private JTextField dmgfill2; 
private Frame f; 

private ArrayList<Spell> changedSpellArray; 

public SpellArraySorter(ArrayList<Spell> spellArray, Frame f){ 
     this.f = f; 
     changedSpellArray = new ArrayList<Spell>(spellArray); 

     frame = new JFrame(); 
     level = new JTextField(); 
     levelfill = new JTextField(); 
     name = new JTextField(); 
     namefill = new JTextField(); 
     dmg1 = new JTextField(); 
     dmg2 = new JTextField(); 
     dmgfill1 = new JTextField(); 
     dmgfill2 = new JTextField(); 

     help = new JButton("HELP"); 
     enter = new JButton("enter"); 

     frame.setLayout(null); 
     frame.getContentPane().setBackground(Color.BLACK); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setPreferredSize(new Dimension(300, 300)); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 

     level.setBounds(30, 35, 100, 20); 
     levelfill.setBounds(180, 35, 100, 20); 
     name.setBounds(30, 90, 100, 20); 
     namefill.setBounds(180, 90, 100, 20); 
     dmg1.setBounds(30, 145, 100, 20); 
     dmg2.setBounds(200, 145, 20, 20); 
     dmgfill1.setBounds(180, 145, 20, 20); 
     dmgfill2.setBounds(220, 145, 20, 20); 

     level.setText("Level of Spell: "); 
     name.setText("name of Spell: "); 
     dmg1.setText("Damage of Spell: "); 
     dmg2.setText("d"); 

     level.setEditable(false); 
     name.setEditable(false); 
     dmg1.setEditable(false); 
     dmg2.setEditable(false); 

     help.setBounds(30, 215, 100, 20); 
     enter.setBounds(180, 215, 100, 20); 

     help.addActionListener(this); 
     enter.addActionListener(this); 

     frame.add(level); 
     frame.add(levelfill); 
     frame.add(name); 
     frame.add(namefill); 
     frame.add(dmg1); 
     frame.add(dmg2); 
     frame.add(dmgfill1); 
     frame.add(dmgfill2); 
     frame.add(help); 
     frame.add(enter); 

     frame.setVisible(true); 
    } 

Ich kann nicht für das Leben von mir herauszufinden, warum, aber jedes Mal, wenn ich Sie auf die addSpell JButton auf der GUI des Frame-Klasse, ich habe 6 JFrames der Klasse SpellArraySorter erscheinen.

Antwort

1

Ich bin mir nicht sicher, ob Sie Ihr Code-Snippet falsch kopiert haben oder nicht, aber das sieht für mich normal aus.

Diese Zeile verursacht Ihr Problem:

new SpellArraySorter(temp, this);

Der Grund ist, weil Sie die obige Zeile, während immer noch in Ihrem FOR-Schleife aufrufen. jedes Element so in Ihrer SpellList Sie eine neue JFrame erstellen, wenn Sie new SpellArraySorter(temp, this);

dieses Probieren:

if(e.getSource() == addSpell){ 
     ArrayList<Spell> temp = new ArrayList<Spell>(); 
     for(Spell spell: SpellList.getSpellList()){ 
      if(spell.getType().equals(user.getType())){ 
       temp.add(spell); 
      } 
      //LINES MOVED FROM HERE 
     } 
     //LINES MOVED TO HERE 
     new SpellArraySorter(temp, this); 
     this.setVisible(false); 
+0

ich die schließende Klammer versehentlich gelöscht hatte und verpassten diese Fehler mindestens drei von vier Mal. Vielen Dank! – Deek3117