Ajouter une action à un JButton lors de l'utilisation d'une boucle for
Je suis en train d'ajouter dynamiquement des boutons (JButtons), ce qui change des noms à chaque fois. - Je le faire avec une boucle for et n'est pas vraiment problématique. mais lors de l'ajout d'une action de l'auditeur ou de l'identification qui suis appuyé sur le bouton, c'est quand les choses ne fonctionnent pas si bon.
MyFrame.java
import javax.swing.*;
import java.awt.event.*;
import java.awt.GridLayout;
public class MyFrame extends JFrame implements ActionListener
{
private JPanel panel;
private static JButton[] buttons = new JButton[18];
//set all static calculate JButtons
private static JButton equalsBtn, addBtn, subBtn, multiBtn, divBtn, clearBtn, plusMinusBtn, decimalBtn;
//set all static number JBtuttons
private static JButton zeroBtn, oneBtn, twoBtn, threeBtn, fourBtn, fiveBtn, sixBtn, sevenBtn, eightBtn, nineBtn;
private static JTextField resultField;
//numOne is the first row of figures en the second numSecond is the second row
private static double numOne, numSecond, result;
private static double plusMinus;
private static int addClick = 0, subClick = 0, multiClick = 0, divClick = 0;
private static int clearField;
public MyFrame() {
//configure the JFrame
super("Rekennen maar!");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setSize(230, 370);
setLocationRelativeTo(null);
//confugure the JPanel
panel = new JPanel();
panel.setSize(230, 370);
panel.setLayout(new GridLayout(5, 0));
//array string whit all the button names
String a_btnNames[] = {"clearBtn", "plusMinusBtn", "divBtn", "multiBtn", "sevenBtn", "eightBtn", "nineBtn", "subBtn", "fourBtn", "fiveBtn", "sixBtn", "addBtn", "oneBtn", "twoBtn", "threeBtn", "equalsBtn", "zeroBtn", "decimalBtn"};
//array String whit all button characters
String a_btnCharts[] = {"C", "+/-", "/", "*", "7", "8", "9", "-", "4", "5", "6", "+", "1", "2", "3", "=", "0", "."};
for(int i = 0; i < buttons.length; i++)
{
//make new button name
buttons[i] = new JButton(a_btnNames[i]);
//add button to panel
panel.add(new JButton(a_btnCharts[i]));
//System.out.println(buttons[i]);
}
//add panel when he's filled
add(panel);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
//press the button
if ( e.getSource() == ...... ) {
System.out.println("123");
}
}
}
Main.java
public class Main {
public static void main(String[] arg) {
MyFrame mf = new MyFrame();
}
}
Pourquoi utilisez-vous
new JButton("" + a_btnNames[i]);
? new JButton(a_btnNames[i]);
pourrait fonctionner tout aussi bien. De Plus, vous ne créez pas de buttons.length
boutons, mais buttons.length*2
. Essayez d'utiliser buttons[i]=new JButton(...); panel.add(buttons[i])
OriginalL'auteur Wbcreators Crea | 2013-11-27
Vous devez vous connecter pour publier un commentaire.
Il n'y a rien à l'écoute lorsque les touches sont pressées. Lorsque vous créez chaque bouton, vous devez leur donner de l'action des auditeurs.
Aussi, vous devriez être en ajoutant le même bouton que vous créez.
Nouvelle pour la boucle doit être...
OriginalL'auteur Mike M
Modifier la boucle, pour quelque chose comme cela.
Et puis avoir un actionPerformed() comme ceci.
Devrait fonctionner.
if
bloc avec unswitch
déclaration, mais sinon +1. Le mépris de la dernière peu, juste de rappeler Java n'aime pas les commutateurs deOuais, vous avez raison. Une apparence plus soignée.
OriginalL'auteur Rayf
Quelques changements
et
Votre méthode principale devrait être
Lire Le Event Dispatch Thread
OriginalL'auteur vels4j
N'oubliez pas d'ajouter le ActionListener à JButtons premier. Puis, à l'aide de getSource() de cette façon, n'aide pas dans votre cas parce que vous n'êtes pas en gardant des références à la JButtons que vous voulez ajouter au groupe. Vous pouvez utiliser getActionCommand() au lieu - comportement par Défaut est elle retourne l'étiquette du bouton, mais vous pouvez le remplacer avec setActionCommand(...):
OriginalL'auteur Dario
Eh bien, je ne vois aucun problème quand vous savez que
evt.getSource()
le retour de la source de la Composante de laActionEvent
.Pour inscrire une action de l'auditeur d'un composant comme
JButton
, nous avons l'habitude de le faire:Pour votre contexte, vous pouvez passer
ActionListener
en utilisant l'aide dethis
.Ne pas mettre en œuvre
ActionListener
interface d'une classe qui n'écoute pas de tel Événement ou de ont leur. Si nécessaire déclarer une nouvelle classe de mise en œuvre et l'utilisation instance de cette classe pour enregistrer l'écouteur.Mais vous êtes probablement avoir de malentendu sur la définition de nom avec
new JButton("some text")
.Ce n'est pas de définir le nom de la Touche, mais c'est plutôt le contenu du texte. Vous avez besoin d'utiliser
button.setName("aName")
à la place.Cependant, Vous pouvez toujours utiliser l'une des
getName
ougetText
méthode pour identifier votre bouton spécifique.OriginalL'auteur Sage
boucle sur le JButton tableau:
}
OriginalL'auteur Larois