
Ok, ce langage a fait ses preuves (en tout cas il reste à la mode). Je me devais alors de prendre un aperçu pour ne pas rester dans le flou intersidéral à ce sujet. Alors avant de prendre mon billet pour la cambrousse je charge sur mon portable (l'ordinateur) une documentation (avec quelques fautes de frappe, succincte mais suffisante et assez claire) ainsi qu'un JDK (Java Dev Kit) un peu au hasard.
Je n'ai pas encore tout capté des concepts du langage comme par exemple la création d 'évènements multi-thread ou ce genre de bizarreries sûrement très pratique pour une meilleurs optimisation des ressources (bla blabla), mais quelle joie d'avoir une interface utilisateur fonctionnelle en quelques jours.
Le résultat, une application qui ne sert à rien et qui affiche le contenu des boutons sur lesquels on clique... (Mais c'est z'ubër!) Le but serait de réaliser une petite calculette.
C'est partit pour un code source commenté :
/**File : MyCalc.java
* version : 0.000000.1
* Ma première application en Java
* Ne fait rien mis à part afficher les boutons cliqués
*/
//Compilation : javac MyCalc.class
//2 warnings sur le jdk 1.5 :'(
//Lancement : java MyCalc
import javax.swing.*;
//je dois melange swing et awt pour l'interface graphique : a revoir
//import javax.swing.border.*;
import java.awt.*;
//permet de gerer les évennements utilisateurs
import java.awt.event.*;
//definition d'une classe correspondant au nom de fichier
public class MyCalc extends JFrame implements ActionListener{
//Message par défaut
protected JLabel view_msg = new JLabel("Hello World!");
public MyCalc(){
super();
setTitle(" My Calc ");
//Définition de la fenêtre principale
this.initGraphic();
//Todo: implement action in menu
//setMenuBar(new InitMenu());
//Style de layout principal (5 positions de composant possible)
//(haut, bas, gauche, droite, centre : NORTH, SOUTH ...)
setLayout(new BorderLayout());
this.initBody();
this.buttonBoard();
//Pour que les composants de l'interface soient correctement placés
//Mais fout en l'air la taille de la fenêtre quand elle est spécifiée
pack();
//Remplace show() qui est deprecated :
setVisible(true);
}
protected void initGraphic(){
//taille de la fenetre
setSize(205, 155);
//setResizable(false);
//position de la fenetre
setLocation(250, 250);
//permet de quitter l'application
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
}
protected void initBody(){
Panel p_body = new Panel();
add(p_body, BorderLayout.NORTH);
//Message d'accueil et boutons cliqués dans un panel au nord
//faire 5 pas après le cocotier pour trouver le trésor
p_body.add(view_msg);
}
protected void buttonBoard(){
//Ah! et le panel est un composant conteneur de composants
//pratique!
Panel p_btns = new Panel();
add(p_btns, BorderLayout.SOUTH);
//FlowLayout affiche les composants à l'affilé
//La grille est mieux ici
p_btns.setLayout(new GridLayout(4,3));
for (int num = 1; num <= 9; num++){
String name = "b_" + num;
//On ne fait pas n'importe quoi avec les types : Integer.toString
//Mon chiffre devient une chaîne de charactères
JButton $name = new JButton(Integer.toString(num));
//$ pour accéder à "l'adresse" de la variable (merci pif)
$name.addActionListener (this);
p_btns.add($name);
}
//Button c'est moins stylé
JButton b_star = new JButton("*");
b_star.addActionListener (this);
JButton b_0 = new JButton("0");
b_0.addActionListener (this);
JButton b_diese = new JButton("#");
b_diese.addActionListener (this);
p_btns.add(b_star);
p_btns.add(b_0);
p_btns.add(b_diese);
//une class "bouton" serait utile pour éviter de se repeter (DRY)
}
public void actionPerformed (ActionEvent e) {
//Le meilleur moyen pour activer telle ou telle action en fonction de l'interaction
//Object source = e.getSource();
//if(source == b_star) this.view_msg.setText("Star");
//Sinon utiliser le texte du bouton (pas bien):
//if(e.getActionCommand() == "*") this.view_msg.setText("*");
this.view_msg.setText(e.getActionCommand());
}
//pas necessaire pour un applet
public static void main(String argv []){
new MyCalc();
}
}