Calculatrice Swing - premier programme GUI - Code Review pile d'échange
tempNumbers est pas un nom très variable explicative. Laissez la variable elle-même décrire ce qu'il est temporaire pour. Pour une simple calculatrice bien, peut-être nombre1 et nombre2 suffiraient.
Vous utilisez indentation étrange dans votre constructeur. Il est bon que vous séparer les champs, mais pas besoin d'ajouter une empreinte supplémentaire pour les lignes où vous appeler des méthodes sur les boutons.
La numberButtonsAction de classe doit être nommé au capital N pour être compatibles avec les conventions de codage Java.
Vous avez ce cas dans votre code:
Mais quand vous clair que textfield, vous ne définissez pas à « 0,0 ». vous définissez à une chaîne vide:
Je ne sais pas comment tout cela fonctionne lors de l'exécution, mais il est un peu suspect pour moi. Peut-être que vous voulez analyser le texte en double (mis à 0.0 si ce n'est pas un nombre), vérifiez la valeur, et comparer avec la valeur au lieu du texte. Juste une idée bien.
Pour les différentes opérations, vous devriez envisager d'utiliser le modèle de stratégie.
Vous pouvez utiliser un ENUM au lieu d'un octet.
Si vous utilisez Java 8, vous pouvez utiliser l'interface DoubleBinaryOperator et lambdas. Vous pouvez aussi faire l'ensemble des choses ActionListener beaucoup plus lisse en utilisant des références de méthode Java. button.addActionListener (ce :: divideButtonClick); (I love Java 8!)
Les noms de classe actuelle DivideButton. MultiplyButton etc sonne comme ils étendent JButton. mais ils ne le font pas (et ils ne devraient pas si c'est bon). De meilleurs noms ajouteraient Listener à la fin, cependant, si vous ne pouvez pas utiliser Java 8, vous pouvez créer une classe commune comme ceci:
Et l'utiliser comme ceci:
À l'heure actuelle, vous utilisez une boucle pour créer les boutons:
Et puis vous avez une boucle pour ajouter les boutons du panneau:
Et un autre, un peu plus loin vers le bas, pour créer les auditeurs:
Vous n'avez pas besoin de toutes ces trois boucles. simplement un seul suffit. Cela permettra également de rendre les tableaux que vous utilisez inutile. Il n'y a pas besoin de les stocker dans un tableau du tout.
Vous n'êtes pas en train de modifier le comportement de JFrame alors pourquoi vous l'étendre. Il est une erreur « commune » avec Swing. Vous devez retirer votre extends JFrame pour un champ DFrame privé dans votre classe. Cela changera presque rien à votre code puisque tout serait faire est au lieu d'appeler directement ajouter, vous appeler sur votre terrain. Ce qui va changer est votre ne sera pas attacher à JFrame tant. Waht si vous voulez un JDialog au lieu d'un JFrame. Avoir un champ fera ce changement plus facile. (Dans votre cas, vous aurez besoin d'un JFrame mais il ne pouvait pas toujours le cas).
Il y a quelque chose qui me plaît votre code, pas de position absolue! Vous ne savez pas combien cela est précieux pour maintenir une interface graphique! Je traite avec une interface graphique avec la position absolue, et il est tout simplement horrible! Continue comme ça. Utilisez la mise en page dont vous avez besoin, ne soyez pas trop restrictif dans votre conception et jamais (enfin pas jamais) la position de vos composants d'une manière absolue.
Personnellement, je ne l'aime pas quand vous mentionnez le nom de la classe dans une variable.
Si vous changez votre classe, oups, vous devez changer votre nom de variable ou il sera incompatible! Vous pouvez opter pour resultText ou tout simplement résultat mais vous ne avez pas vraiment besoin de mentionner que c'est un JTextField.
répondit le 19 juin '14 à 17h21
Je suis totalement d'accord sur tout. L'extension JFrame au lieu de l'utiliser est une erreur, je l'ai aussi fait plusieurs fois. Ce problème est plus ou moins disparu avec JavaFX, heureusement :) - Simon Forsberg ♦ 19 juin '14 à 17h59