Convertisseur de 4 types de variables avec un combobox

Soyez le premier à donner votre avis sur cette source.

Vue 5 434 fois - Téléchargée 362 fois

Description

ce convertisseur permet de convertir du $ au Dh, du pound au kg, du mile au mètre et du °C au °F dans les deux sens en utilsant un combobox pour choisir le type de conversion souhaité.

Source / Exemple :


package convertisseur;

import javax.swing.JPanel;
import java.awt.GraphicsConfiguration;
import java.awt.HeadlessException;

import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.Rectangle;

import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class Convertisseur extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JButton jButton = null;
	private JButton jButton1 = null;
	private JTextField jTextField = null;
	private JTextField jTextField1 = null;
	private JComboBox jComboBox = null;
	private JLabel jLabel = null;
	private JLabel jLabel1 = null;

	public Convertisseur() throws HeadlessException {
		super();
		initialize();
	}

	public Convertisseur(GraphicsConfiguration gc) {
		super(gc);
		initialize();
	}

	public Convertisseur(String title) throws HeadlessException {
		super(title);
		initialize();
	}

	public Convertisseur(String title, GraphicsConfiguration gc) {
		super(title, gc);
		initialize();
	}

	/**

  • This method initializes this
*
  • @return void
  • /
private void initialize() { this.setResizable(false); this.setLocationRelativeTo(null); this.setSize(479, 224); this.setContentPane(getJContentPane()); this.setTitle("Convertisseur"); } /**
  • This method initializes jContentPane
*
  • @return javax.swing.JPanel
  • /
private JPanel getJContentPane() { if (jContentPane == null) { jLabel1 = new JLabel(); jLabel1.setBounds(new Rectangle(49, 90, 56, 15)); jLabel1.setText("$"); jLabel = new JLabel(); jLabel.setBounds(new Rectangle(344, 91, 49, 15)); jLabel.setText("DH"); jContentPane = new JPanel(); jContentPane.setLayout(null); jContentPane.add(getJButton(), null); jContentPane.add(getJButton1(), null); jContentPane.add(getJTextField(), null); jContentPane.add(getJTextField1(), null); jContentPane.add(getJComboBox(), null); jContentPane.add(jLabel, null); jContentPane.add(jLabel1, null); } return jContentPane; } /**
  • This method initializes jButton
*
  • @return javax.swing.JButton
  • /
@SuppressWarnings("deprecation") private JButton getJButton() { if (jButton == null) { jButton = new JButton(); jButton.setBounds(new Rectangle(175, 106, 91, 26)); jButton.setEnabled(false); jButton.setText(">>>"); jButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { boolean error = test(); // on test la chaine if(error){ // si erreur JOptionPane.showMessageDialog(null,"Opérande manquant ou non valide!!");// on affiche un msg jTextField1.setText(""); // on vide la zone texte } else{ // sinon double d=Double.parseDouble(jTextField1.getText()); switch(jComboBox.getSelectedIndex()){ case 0: // si conversion du dollar vers dirham d *= 7.7; break; case 1: // si conversion du Kg vers pound d *= 0.45; case 2: // si conversion du metre vers mile d *= 1.6; break; case 3: // si conversion du °C vers °F d=( 9 * d / 5 ) + 32; break; } d=(double) Math.round(d * 100) / 100; //on prend de chiffres après la virgule jTextField.setText(""+d); // on affiche } } }); } return jButton; } /**
  • This method initializes jButton1
*
  • @return javax.swing.JButton
  • /
private JButton getJButton1() { if (jButton1 == null) { jButton1 = new JButton(); jButton1.setBounds(new Rectangle(175, 148, 91, 26)); jButton1.setText("<<<"); jButton1.setEnabled(false); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { boolean error = test(); if(error){ JOptionPane.showMessageDialog(null,"Opérande manquant ou non valide!!"); jTextField.setText(""); } else{ double d=Double.parseDouble(jTextField1.getText()); switch(jComboBox.getSelectedIndex()){ case 0: d /= 7.7; break; case 1: d /= 0.45; case 2: d /= 1.6; break; case 3: d=( 5 * (d-32) / 9 ) - 32; break; } d=(double) Math.round(d * 100) / 100; jTextField1.setText(""+d); } } }); } return jButton1; } /**
  • This method initializes jTextField
*
  • @return javax.swing.JTextField
  • /
private JTextField getJTextField() { if (jTextField == null) { jTextField = new JTextField(); jTextField.setBounds(new Rectangle(290, 126, 141, 29)); jTextField.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent e) { jButton1.setEnabled(true); //on active le boutton de la converssion jButton.setEnabled(false); //on désactive le boutton du sens inverse jTextField1.setText(""); //on vide l'autre champ } }); } return jTextField; } /**
  • This method initializes jTextField1
*
  • @return javax.swing.JTextField
  • /
private JTextField getJTextField1() { if (jTextField1 == null) { jTextField1 = new JTextField(); jTextField1.setBounds(new Rectangle(16, 126, 141, 29)); jTextField1.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent e) { jButton.setEnabled(true); jButton1.setEnabled(false); jTextField.setText(""); } }); } return jTextField1; } /**
  • This method initializes jComboBox
*
  • @return javax.swing.JComboBox
  • /
private JComboBox getJComboBox() { if (jComboBox == null) { jComboBox = new JComboBox(); jComboBox.setBounds(new Rectangle(163, 22, 119, 32)); jComboBox.addItem("Devise"); jComboBox.addItem("Poinds"); jComboBox.addItem("Distance"); jComboBox.addItem("Température"); jComboBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { jTextField.setText(""); jTextField1.setText(""); jButton.setEnabled(false); jButton.setEnabled(false); switch(jComboBox.getSelectedIndex()){ case 0: jLabel.setText("DH"); jLabel1.setText("$"); break; case 1: jLabel.setText("Pound"); jLabel1.setText("Kg"); break; case 2: jLabel.setText("m"); jLabel1.setText("Mile"); break; case 3: jLabel.setText("°C"); jLabel1.setText("°F"); break; } } }); } return jComboBox; } public boolean test(){ boolean error = false; int virgule = 0; String s = jTextField1.getText(); //on prend la chaine de la zone texte et on la met dans une chaine de caractère if(s.length()==0) // si la cchaine est vide error=true; // on a une erreur else{ // sinon for(int i=0;i<s.length();i++){ //on teste chaque caractère de la chaine char c = s.charAt(i); if(!Character.isDigit(c)) //si le caractère n'est pas numérique error = true; // on a une erreur String ss = new String(String.valueOf(c)); if(ss.compareTo(".")==0 && virgule<=1){ // on teste si le caractère est une virgule et que c'est la première virgule error = false; // si c le cas on met erreur sur faux virgule++; // on incrémante virgule } } } return error; } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { Convertisseur application = new Convertisseur(); application.setVisible(true); } }); } } // @jve:decl-index=0:visual-constraint="120,18"

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
90
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
4 février 2009

De rien.
Maintenant, nous pouvons effectuer quelques petites optimisations:

double d=0;

switch(jComboBox.getSelectedIndex()){

case 0: // si conversion du dollar vers dirham

d = Double.parseDouble(jTextField1.getText())*7.7;

break;

case 1: // si conversion du Kg vers pound

d=Double.parseDouble(jTextField1.getText())*0.45;

break;

case 2: // si conversion du metre vers mile

d=Double.parseDouble(jTextField1.getText())*1.6;

break;

case 3: // si conversion du °C vers °F

d=( 9 * Double.parseDouble(jTextField1.getText()) / 5 ) + 32;

break;

}


Puisque, dans les 3 premiere valeurs que peut prendre la valeur de jComboBox.getSelectedIndex(), il y a toujours une affectation du type
d=Double.parseDouble(jTextField1.getText()), alors nous pouvons écrire le code comme suit:


double d=Double.parseDouble(jTextField1.getText());

switch(jComboBox.getSelectedIndex()){

case 0: // si conversion du dollar vers dirham

d *= 7.7;

break;

case 1: // si conversion du Kg vers pound

d *= 0.45;

break;

case 2: // si conversion du metre vers mile

d *= 1.6;

break;

case 3: // si conversion du °C vers °F

d=( 9 * Double.parseDouble(jTextField1.getText()) / 5 ) + 32;

break;

}

Tu peux aussi optimiser l'autre structure switch similaire. Juste a remplacer (a partir du code ci-dessus):

- Tout les *= par des /=


Cependant tu dois conserver la formule suivante pour le dernier cas de la structure:

d=( 5 * (Double.parseDouble(jTextField.getText())-32) / 9 ) - 32;
pour la conversion F -> C
Messages postés
1
Date d'inscription
mardi 30 octobre 2007
Statut
Membre
Dernière intervention
21 janvier 2009

j'ai pris en compte votre remarque et la modification est faite. maerci
Messages postés
90
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
4 février 2009

Salut.

Il y a une toute petite erreur dans ton code:

C = (5.0 / 9.0) * (F - 32) et

F = (9.0 / 5.0) * (C + 32).


Toi, dans ton code, tu as ce qui suit:

(9 * Double.parseDouble(jTextField1.getText()) / 5 ) + 32;

(5 * (Double.parseDouble(jTextField.getText())-32) / 9) - 32;


Soit f=5

f->c


( 5 * (Double.parseDouble(jTextField.getText())-32) / 9 ) - 32;

(5 * (f - 32) / 9) - 32

(5*(5-32) / 9)-32 (5*-27/9)-32

(-135/9)-32 (-15)-32

-47 =



avec ta formule, lorsqu'il fait 5 deg. F, il ferait -47 deg. C. Voyons avec ma formule



(5.0 / 9.0) * (f - 32)

(0,555555555555555555555555555555556) * (5 - 32)

(0,555555555555555555555555555555556) * (-27)

-15



Soit c=-15

c->f



( 9 * Double.parseDouble(jTextField1.getText()) / 5 ) + 32;

(9 * -15 / 5) + 32

(-135 / 5) + 32

-27 + 32

5



ca semble bon. Voyons avec ma formule



(9.0 / 5.0) * c + 32

(1,8) * -15 + 32

-27 + 32

5

Tu trouveras d'autres formules de ce genre ici

chris081

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.