Kage
Messages : 30 Date d'inscription : 26/11/2009 Age : 32 Localisation : Lesneven
| Sujet: [Java] Calculatrice Sam 24 Avr - 19:23 | |
| Salut bande de geeks. Bon, je poste ici le code d'un petit projet, une petite calculette graphique, codée en Java. Comme ça, ceux qui désirent prendre un peu d'avance n'auront qu'à examiner mon code, vous verrez il n'y a rien de compliqué qu'on on connait les bases de la prog objet ! En plus, la calculette est rose, c'est quand même la classe . Voila un petit screen : Et le code : Main.java - Code:
-
public class Main { public static void main(String[] args) { Window window = new Window(); } }
Window.java - Code:
-
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel;
public class Window extends JFrame { private JPanel container = new JPanel(); private JLabel ecran = new JLabel(); private String[] tabChiffres = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ".", "=", "C", "+", "-", "*", "/"}; private Button[] tabButtons = new Button[tabChiffres.length]; private Dimension dim = new Dimension(50, 40); private Dimension dim2 = new Dimension(50, 31); private double result; private String operator = ""; private boolean update = true; private boolean clicOperator = false; /* * WINDOW() */ public Window() { //propriétés de la fenêtre this.setTitle("Calcumour <3"); this.setSize(250, 270); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); init(); this.setContentPane(container); this.setVisible(true); }
/* * INIT() */ private void init() { //chiffres de l'écran Font font = new Font("Arial", Font.BOLD, 20); ecran = new JLabel("0"); ecran.setFont(font); ecran.setHorizontalAlignment(JLabel.RIGHT); ecran.setPreferredSize(new Dimension(210,20)); //écran contenant les chiffres JPanel panScreen = new JPanel(); panScreen.add(ecran); panScreen.setBorder(BorderFactory.createLineBorder(Color.black)); panScreen.setPreferredSize(new Dimension(220,30)); panScreen.setBackground(Color.PINK); //création des boutons JPanel numbers = new JPanel(); numbers.setPreferredSize(new Dimension(165,225)); JPanel operators = new JPanel(); operators.setPreferredSize(new Dimension(55,225)); for (int i=0; i<tabChiffres.length; i++) { tabButtons[i] = new Button(tabChiffres[i]); tabButtons[i].setPreferredSize(dim); //tabButtons[i].setBackground(Color.PINK); switch (i) { // = case 11 : numbers.add(tabButtons[i]); tabButtons[i].addActionListener(new EgalListener()); break; // reset case 12 : operators.add(tabButtons[i]); tabButtons[i].setPreferredSize(dim2); tabButtons[i].setForeground(Color.green); tabButtons[i].addActionListener(new ClearListener()); break; // addition case 13 : operators.add(tabButtons[i]); tabButtons[i].setPreferredSize(dim2); tabButtons[i].addActionListener(new PlusListener()); break; // soustraction case 14 : operators.add(tabButtons[i]); tabButtons[i].setPreferredSize(dim2); tabButtons[i].addActionListener(new MoinsListener()); break; // multiplication case 15 : operators.add(tabButtons[i]); tabButtons[i].setPreferredSize(dim2); tabButtons[i].addActionListener(new MultiListener()); break; // division case 16 : operators.add(tabButtons[i]); tabButtons[i].setPreferredSize(dim2); tabButtons[i].addActionListener(new DivListener()); break; default : numbers.add(tabButtons[i]); tabButtons[i].addActionListener(new NumberListener()); break; } } //ajout des composants à la fenêtre container.add(panScreen, BorderLayout.NORTH); container.add(numbers, BorderLayout.CENTER); container.add(operators, BorderLayout.EAST); } /* * CALCUL() */ private void calcul() { if (operator.equals("+")) { result = result + Double.valueOf(ecran.getText()).doubleValue(); ecran.setText(String.valueOf(result)); } if (operator.equals("-")) { result = result - Double.valueOf(ecran.getText()).doubleValue(); ecran.setText(String.valueOf(result)); } if (operator.equals("*")) { result = result * Double.valueOf(ecran.getText()).doubleValue(); ecran.setText(String.valueOf(result)); } if (operator.equals("/")) { try{ result = result / Double.valueOf(ecran.getText()).doubleValue(); ecran.setText(String.valueOf(result)); } catch(ArithmeticException e){ ecran.setText("0"); } } } /*****************************************************************************/ /* LISTENERS */ /*****************************************************************************/ class NumberListener implements ActionListener { public void actionPerformed(ActionEvent arg0) { String str = ((JButton)arg0.getSource()).getText(); if (update) { //si il faut mettre à jour l'écran (reset) if (str == ".") { //si on appuit en premier sur la touche point str = ecran.getText() + str; ecran.setText(str); } else { ecran.setText(str); } update = false; } else { //si il faut continuer à écrire str = ecran.getText() + str; ecran.setText(str); } } } class ClearListener implements ActionListener {
public void actionPerformed(ActionEvent arg0) { ecran.setText("0"); update = true; } } class PlusListener implements ActionListener {
public void actionPerformed(ActionEvent arg0) { if (clicOperator) { calcul(); ecran.setText(String.valueOf(result)); } else { result = Double.valueOf(ecran.getText()).doubleValue(); clicOperator = true; } operator = "+"; update = true; } } class EgalListener implements ActionListener {
public void actionPerformed(ActionEvent arg0) { calcul(); update = true; clicOperator = false; operator = ""; } } class MoinsListener implements ActionListener {
public void actionPerformed(ActionEvent arg0) { if (clicOperator) { calcul(); ecran.setText(String.valueOf(result)); } else { result = Double.valueOf(ecran.getText()).doubleValue(); clicOperator = true; } operator = "-"; update = true; } } class MultiListener implements ActionListener {
public void actionPerformed(ActionEvent arg0) { if (clicOperator) { calcul(); ecran.setText(String.valueOf(result)); } else { result = Double.valueOf(ecran.getText()).doubleValue(); clicOperator = true; } operator = "*"; update = true; } } class DivListener implements ActionListener {
public void actionPerformed(ActionEvent arg0) { if (clicOperator) { calcul(); ecran.setText(String.valueOf(result)); } else { result = Double.valueOf(ecran.getText()).doubleValue(); clicOperator = true; } operator = "/"; update = true; } } }
Button.java - Code:
-
import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JButton; public class Button extends JButton implements MouseListener{ private String name; private Image img; public Button(String str){ super(str); this.name = str; try { img = ImageIO.read(new File("back.png")); } catch (IOException e) { e.printStackTrace(); } //Avec cette instruction, notre objet va s'écouter lui-même //Dès qu'un événement de la souris sera intercepté, il sera au courant this.addMouseListener(this); } public void paintComponent(Graphics g){ Graphics2D g2d = (Graphics2D)g; g2d.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this); g2d.setColor(Color.black); g2d.drawString(this.name, this.getWidth() / 2 - (this.getWidth() / 2 /4), (this.getHeight() / 2) + 5); }
//on clique @Override public void mouseClicked(MouseEvent arg0) { // TODO Auto-generated method stub }
//survol de la souris @Override public void mouseEntered(MouseEvent arg0) { try { img = ImageIO.read(new File("survol.png")); } catch (IOException e) { e.printStackTrace(); } }
//la souris quitte la zone @Override public void mouseExited(MouseEvent arg0) { try { img = ImageIO.read(new File("back.png")); } catch (IOException e) { e.printStackTrace(); } }
//clic gauche pressé @Override public void mousePressed(MouseEvent arg0) { try { img = ImageIO.read(new File("click.png")); } catch (IOException e) { e.printStackTrace(); } }
//clic gauche relaché @Override public void mouseReleased(MouseEvent event) { //si la souris est toujours sur le bouton if (event.getY() > 0) { try { img = ImageIO.read(new File("survol.png")); } catch (IOException e) { e.printStackTrace(); } } //si la souris est en dehors du bouton else { try { img = ImageIO.read(new File("back.png")); } catch (IOException e) { e.printStackTrace(); } } } }
Voila, si vous avez des questions sur mon code (il est loin d'être parfait ^^), hésitez pas. Bonnes fin de vacances à tous, tchous ! | |
|
ezano Admin
Messages : 59 Date d'inscription : 26/11/2009 Age : 33 Localisation : Lannion
| Sujet: Re: [Java] Calculatrice Mar 27 Avr - 21:18 | |
| Houuu mais j'avais pas vu ça Effectivement, la GUI à pas l'air très difficile à programmer. Comme pour la plupart des bibli graphique, le truc chiant c'est le nombre de méthodes/fonctions à retenir, au vu du code, Swing et AWT ont l'air bien fournit à ce niveau la. Un détail cependant : - Code:
-
this.setTitle("Calcumour <3"); | |
|
Kage
Messages : 30 Date d'inscription : 26/11/2009 Age : 32 Localisation : Lesneven
| Sujet: Re: [Java] Calculatrice Mer 28 Avr - 11:10 | |
| Bah ouai, c'est la classe =p xD.
Sinon pour les fonctions, ya pas forcément besoin de les apprendre par coeur, fin de les retenir quoi. C'est assez logique comme utilisation. | |
|
Contenu sponsorisé
| Sujet: Re: [Java] Calculatrice | |
| |
|