Un vieux code réalisé en Tp il y a 2 ans que j'ai retrouvé il y a peu.
Il permet de convertir un nombre écrit en base 10 en un nombre écrit dans une base comprise entre 2 et 35, ainsi que l'inverse.
Source / Exemple :
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class Conversions {
//declarations des composants graphiques
private JFrame fenetre;
private JSlider base;
private JPanel p1,p2,p3;
private JTextField jfield1,jfield2;
private JLabel label3,label2;
private JTextArea jarea;
private final static String doc = //aide contenue dans le JTextArea
"\t\tBrève documentation de cette application... \n"+
"\nCe petit programme permet de convertir un nombre en base 10 dans une base comprise entre 2 et 36.\n" +
"Le \"potentiomètre\" permet de selectionner la base.\n" +
"La modification d'un champ suivie de la validation par la touche ENTREE met à jour l'autre champ.\n" +
"Lors d'un changement de la base, la valeur en base 10 est convertie.\n\n"+
"Les nombres saisis s'écrivent en utilisant les chiffres de 0 à 9,\n"+
"puis les lettres de A à Z (miniscules ou majuscules).\n";
private final static String[] chiffres = {"0","1","2","3","4","5","6","7","8","9","A",
"B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W",
"X","Y","Z"};
//Constructeur
public Conversions() {
fenetre = new JFrame("Conversions...");
Container reser = fenetre.getContentPane();
label2 = new JLabel("En base 10");
label3 = new JLabel("En base 2");
//--- haut de la fenetre -------------------------------------------------------------------------------
String s1 = "Changement de base de numération";
jarea = new JTextArea(doc);
jarea.setEditable(false);
JScrollPane jscroll = new JScrollPane(jarea);
p1 = new JPanel(new BorderLayout());
p1.add(jscroll,BorderLayout.NORTH);
p1.setBorder(BorderFactory.createTitledBorder(s1));
reser.add(p1,BorderLayout.NORTH);
//--- JSlider ----------------------------------------------------------------------------------------------
p2 = new JPanel(new GridLayout(0,1));
String s2 = "Sélection de la base";
base = new JSlider(2,36,2);
//--- listener du slider -----------------------------------------------------------------------------------
ChangeListener b = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
label3.setText("En base "+base.getValue());
label3.setHorizontalAlignment(SwingConstants.CENTER);
String res = "";
if (jfield1.getText() == null || jfield1.getText().length() == 0){
jfield1.setText(JOptionPane.showInputDialog(fenetre,"Entrez un nombre en base 10","Champ \"Base 10\" vide",JOptionPane.QUESTION_MESSAGE));}//if
String s = jfield1.getText();
boolean erreur = false;
for (int i =0;((i<s.length()) && (!erreur));i++) {
if (!('0'<=s.charAt(i) && s.charAt(i)<='9')) {
Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(fenetre,"En base 10, on n'utilise uniquement les chiffres entre 0 et 9","Chiffre non autorisé",JOptionPane.ERROR_MESSAGE);
erreur = true;
}//if
}//for
if (!erreur) {
int b = Integer.parseInt(jfield1.getText());
int n = base.getValue();
while (b != 0 ) {
res = chiffres[b%n]+res;
b = b/n;
}//while
}//if
jfield2.setText(res);
}
};
base.addChangeListener(b);
base.setMajorTickSpacing(2);
base.setPaintTicks(true);
base.setPaintLabels(true);
p2.add(base);
p2.setBorder(BorderFactory.createTitledBorder(s2));
reser.add(p2,BorderLayout.CENTER);
//--- les champs de saisie --------------------------------------------------------------------------------------------
p3 = new JPanel(new GridLayout(0,2));
jfield1 = new JTextField("");
jfield2 = new JTextField("");
jfield1.setHorizontalAlignment(SwingConstants.CENTER);
jfield2.setHorizontalAlignment(SwingConstants.CENTER);
label2.setHorizontalAlignment(SwingConstants.CENTER);
label3.setHorizontalAlignment(SwingConstants.CENTER);
//--- mise a l'écoute des champs ----------------------------------------------------------------------------------------
//--- champ base 10 -----------------------------------------------------------------------------------------------------
ActionListener b10 = new ActionListener() {
public void actionPerformed(ActionEvent e) {
String s = jfield1.getText();
boolean erreur = false;
for (int i =0;i<s.length() && !erreur;i++) {
if (!('0'<=s.charAt(i) && s.charAt(i)<='9')) {
Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(fenetre,"En base 10, on n'utilise uniquement les chiffres entre 0 et 9","Chiffre non autorisé",JOptionPane.ERROR_MESSAGE);
erreur = true;
}//if
}//for
if (!erreur) {
String res = "";
int b = Integer.parseInt(jfield1.getText());
int n = base.getValue();
while (b != 0 ) {
res = chiffres[b%n]+res;
b = b/n;
}//while
jfield2.setText(res);
}//if
}//actionPerformed
};//class anonyme
jfield1.addActionListener(b10);
//--- champ de la base n -------------------------------------------------------------------------------------------------
ActionListener bn = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try{
jfield1.setText(""+Integer.parseInt(jfield2.getText(),base.getValue()));
}catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(fenetre,"En base "+base.getValue()+", on utilise les chiffres entre 0 et "+chiffres[base.getValue()-1],"Chiffre non autorisé",JOptionPane.ERROR_MESSAGE);
}//catch
}//actionPerformed
};//class anonyme
jfield2.addActionListener(bn);
//--------------------------------------------------------------------------------------------------------------------
p3.add(label2);
p3.add(jfield1);
p3.add(label3);
p3.add(jfield2);
reser.add(p3,BorderLayout.SOUTH);
}//Conversions()
//affichage
public void afficher() {
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenetre.setSize(650,350);
fenetre.setResizable(false);
fenetre.setVisible(true);
}//afficher
//main
public static void main (String [] args) {
Conversions convertisseur = new Conversions();
convertisseur.afficher();
}//main
}//class Conversions
Conclusion :
Tout est expliqué dans le JTextArea de l'appli, suffit d'ouvrir la capture^^
C'est pas tres objet dans le sens ou il n'y a qu'une classe seule classe qui gère tout, mais ça date de mes débuts en Java. Ideal pour se faire la main avec le JSlider.
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.