2017-03-22 9 views
0

Ich steckte jetzt eine Weile hier fest und dachte nach ein bisschen suchen und nicht finden, was ich suche würde fragen, ob jemand eine Lösung für mein Problem hat. Derzeit arbeite ich an einem kleinen Collage-Projekt, in dem ich ein Panel haben muss, das 100 Buttons enthält, aber jeder Button muss einen Action-Listener haben. Wenn dieser Aktions-Listener ausgewählt ist, muss er seine Nummer im Raster anzeigen und den Text der Schaltfläche ändern.ArrayList <JButton> Hinzufügen von Action Listenern mit ArrayList

for (int i = 0; i < 100; ++i) //Sets buttons created 
    { 
     ArrayList<JButton> testButton = new ArrayList<JButton>(); //Button Text 
     PlayerGrid1.add(new JButton(" ? ")); 
    } 

Der Kodex ist, wie ich die Tasten auf der Arraylist hinzufügen, aber das Problem, das ich habe ist, wenn ich versuche, eine Aktion Hörer hinzufügen es Fehler über abstrakte Schaltflächen und andere Fragen wirft.

JPanel PlayerGrid1 = new JPanel(); 
    PlayerGrid1.setBackground(Color.WHITE); 
    PlayerGrid1.setBounds(0, 0, 375, 400); 
    frmBattleships.getContentPane().add(PlayerGrid1); 
    PlayerGrid1.setLayout(new GridLayout(10, 10, 0, 0)); 

Dies ist das Raster, in dem ich die Schaltflächen speichern.

Wenn jemand weiß, wie ich einen Listener zu der ArrayList hinzufügen kann oder einen Link zu einem Beitrag von jemandem mit der gleichen Methode wie ich hat, würde es geschätzt werden. Auch nur um jemanden wissen zu lassen, ob dies nicht richtig oder falsch dargestellt ist, bitte nicht flammen. Ich frage normalerweise nicht viele Stack-Überlauf-Fragen. Vielen Dank.

Antwort

0

Karte definiert statt Liste vor for-Schleife wie:

Map<String,JButton> buttonMap = new HashMap<String,JButton>(); 

Danach können Sie einzigartigen Aktionsbefehl für jede Taste in for-Schleife setzen sollen ‚i‘ für diesen Zweck verwendet werden kann.

for (int i = 0; i < 100; ++i) //Sets buttons created 
{ 
JButton button = new JButton(); 
button.setActionCommand(String.valueOf(i)); 
button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       buttonMap.get(e.getActionCommand()).setText("Whatever you want!"); 
      } 
     }); 
buttonMap.put(String.valueOf(i), button); 
PlayerGrid1.add(button); 
} 
0

versuchen, diese `

JFrame frmBattleships = new JFrame(); 
    JPanel PlayerGrid1 = new JPanel(); 
    PlayerGrid1.setBackground(Color.WHITE); 
    PlayerGrid1.setBounds(0, 0, 375, 400); 
    frmBattleships.getContentPane().add(PlayerGrid1); 
    PlayerGrid1.setLayout(new GridLayout(10, 10, 0, 0)); 
    for (int i = 0; i < 100; ++i) // Sets buttons created 
    { 
     ArrayList<JButton> testButton = new ArrayList<JButton>(); // Button 
     JButton newButton = new JButton("" + i); // Text 
     newButton.setName("" + i); 
     newButton.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       System.out.println(((JButton) e.getSource()).getName()); 

      } 
     }); 
     PlayerGrid1.add(newButton); 

    } 
    frmBattleships.setVisible(true); 

` 
Verwandte Themen