lundi 27 octobre 2008

Une classe pour maitriser GridBagLayout


/*
GBC - Une classe pour maitriser GridBagLayout

Copyright (C) 2002 Cay S. Horstmann (http://horstmann.com)

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
import java.awt.*;

/**
* Cette classe simplifie l'utilisation de la classe GridBagLayout
*/
public class GBC extends GridBagConstraints {

/**
* construit un GBC avec une position gridx and gridy donnée
* et toutes les autres valeurs de GridBagLayout définies
* sur le paramètre par defaut .
* @param gridx La position gridx
* @param gridy La position gridy
*/
public GBC(int gridx, int gridy) {
this.gridx = gridx;
this.gridy = gridy;
}

/**
* Construit un GBC avec gridx, gridy, gridwidth, gridheight
* et toutes les autres valeurs de GridBagConstraints definies sur la
* valeur par defaut.
* @param gridx La position gridx
* @param gridy La position gridyn
* @param gridwidth L'étirement de cellule dans la direction x
* @param gridheight L'étirement de cellule dans la direction x
*/
public GBC(int gridx, int gridy, int gridwidth, int gridheight) {
this.gridx = gridx;
this.gridy = gridy;
this.gridwidth = gridwidth;
this.gridheight = gridheight;
}

/**
* Défini l'ancrage.
* @param anchor La valeur de l'ancrage
* @return this object pour une future modification
*/
public GBC setAnchor(int anchor) {
this.anchor = anchor;
return this;
}

/**
* Définit la direction de fill.
* @param fill La direction de fill
* @return this object pour une future modification
*/
public GBC setFill(int fill) {
this.fill = fill;
return this;
}

/**
* Définit les poids de cellule.
* @param weightx Le pods de cellule dans la direction x
* @param weighty Le pods de cellule dans la direction y
* @return this object pour une future modification
*/
public GBC setWeight(double weightx, double weighty) {
this.weightx = weightx;
this.weighty = weighty;
return this;
}

/**
* Définit les insets de cette cellule.
* @param distance L'espacement à utiliser dans toute les directions
* @return this object pour une future modification
*/
public GBC setInsets(int distance) {
this.insets = new Insets(distance, distance, distance, distance);
return this;
}

/**
* Définit les insets de cette cellule.
* @param top L'espacement à utiliser en haut
* @param left L'espacement à utiliser à gauche
* @param bottom L'espacement à utiliser en bas
* @param right L'espacement à utiliser à droite
* @return this object pour une future modification
*/
public GBC setInsets(int top, int left, int bottom, int right) {
this.insets = new Insets(top, left, bottom, right);
return this;
}

/**
* Définit le remplissage interne
* @param ipadx Le remplissage interne dans la direction x
* @param ipady Le remplissage interne dans la direction x
* @return this object pour une future modification
*/
public GBC setIpad(int ipadx, int ipady) {
this.ipadx = ipadx;
this.ipady = ipady;
return this;
}
}


Exemple pour utiliser la classe :


/**
@version 1.32 2004-05-06
@author Cay Horstmann
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class FontDialog
{
public static void main(String[] args)
{
FontDialogFrame frame = new FontDialogFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

/**
A frame that uses a grid bag layout to arrange font
selection components.
*/
class FontDialogFrame extends JFrame
{
public FontDialogFrame()
{
setTitle("FontDialog");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

GridBagLayout layout = new GridBagLayout();
setLayout(layout);

ActionListener listener = new FontAction();

// construct components

JLabel faceLabel = new JLabel("Face: ");

face = new JComboBox(new String[]
{
"Serif", "SansSerif", "Monospaced",
"Dialog", "DialogInput"
});

face.addActionListener(listener);

JLabel sizeLabel = new JLabel("Size: ");

size = new JComboBox(new String[]
{
"8", "10", "12", "15", "18", "24", "36", "48"
});

size.addActionListener(listener);

bold = new JCheckBox("Bold");
bold.addActionListener(listener);

italic = new JCheckBox("Italic");
italic.addActionListener(listener);

sample = new JTextArea();
sample.setText("The quick brown fox jumps over the lazy dog");
sample.setEditable(false);
sample.setLineWrap(true);
sample.setBorder(BorderFactory.createEtchedBorder());

// add components to grid, using GBC convenience class

add(faceLabel, new GBC(0, 0).setAnchor(GBC.EAST));
add(face, new GBC(1, 0).setFill(GBC.HORIZONTAL).setWeight(100, 0).setInsets(1));
add(sizeLabel, new GBC(0, 1).setAnchor(GBC.EAST));
add(size, new GBC(1, 1).setFill(GBC.HORIZONTAL).setWeight(100, 0).setInsets(1));
add(bold, new GBC(0, 2, 2, 1).setAnchor(GBC.CENTER).setWeight(100, 100));
add(italic, new GBC(0, 3, 2, 1).setAnchor(GBC.CENTER).setWeight(100, 100));
add(sample, new GBC(2, 0, 1, 4).setFill(GBC.BOTH).setWeight(100, 100));
}

public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;

private JComboBox face;
private JComboBox size;
private JCheckBox bold;
private JCheckBox italic;
private JTextArea sample;

/**
An action listener that changes the font of the
sample text.
*/
private class FontAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
String fontFace = (String) face.getSelectedItem();
int fontStyle = (bold.isSelected() ? Font.BOLD : 0)
+ (italic.isSelected() ? Font.ITALIC : 0);
int fontSize = Integer.parseInt((String) size.getSelectedItem());
Font font = new Font(fontFace, fontStyle, fontSize);
sample.setFont(font);
sample.repaint();
}
}
}

mercredi 22 octobre 2008

JUnit 4

  • @Test :
    Ajouter l'annotation @Test a vos test tout simplement
@Test
public void addition() {
assertEquals(12, simpleMath.add(7, 5));
}

@Test
public void subtraction() {
assertEquals(9, simpleMath.substract(12, 3));
}

  • @Before et@After
    Ajouter @Before et @After aux méthodes que vous voulez exécuter avant et après chaqu'un de vos test

@Before
public void runBeforeEveryTest() {
simpleMath = new SimpleMath();
}

@After
public void runAfterEveryTest() {
simpleMath = null;
}

  • @BeforeClass et @AfterClass
    Ajouter
    @BeforeClass et @AfterClass aux méthodes qui vont s'exécuter une seule fois avant et après tous les tests
@BeforeClass
public static void runBeforeClass() {
// run for one time before all test cases
}

@AfterClass
public static void runAfterClass() {
// run for one time after all test cases
}

  • Traitement des exceptions
    afin de traiter les exceptions , utiliser "expected " en paramètre dans @Test
@Test(expected = ArithmeticException.class)
public void divisionWithException() {
// divide by zero
simpleMath.divide(1, 0);
}

  • @Ignore
    Ajouter
    @Ignore pour ignorer un test , vous pouvez mettre un chaine de caractere a afficher en paramètre .
@Ignore("Not Ready to Run")
@Test
public void multiplication() {
assertEquals(15, simpleMath.multiply(3, 5));
}

  • Timeout
    utiliser
    timeout en paramètre à @Test pour indiquer la durer max du test , si on la dépasse , le test est echoué
@Test(timeout = 1000)
public void infinity() {
while (true);
}

  • Nouvel assertion
    Comparer deux Collections avec la nouvelle assertion , deux Collections sont égaux si ils ont la même longueur et les composantes égaux entre elles .
public static void assertEquals(Object[] expected, Object[] actual);
public static void assertEquals(String message, Object[] expected, Object[] actual);


@Test
public void listEquality() {
List expected = new ArrayList();
expected.add(5);

List actual = new ArrayList();
actual.add(5);

assertEquals(expected, actual);
}
  • JUnit4Adapter
    lancer vos JUnit Test version 4 dans vos
    JUnit Test version 3
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(SimpleMathTest.class);
}

source des exemples

lundi 22 septembre 2008

Design Patterns appliqués à Java

Excellent livre en ligne , il décrit les Design Patterns qui permettent d'améliorer la qualité de développement et d'en diminuer la durée. , on y retrouve des exemples concrets pour chaque patron étudié en java .

Design Patterns du Gang of Four appliqués à Java par Régis POUILLER
Date de publication : 16/09/2008

vendredi 29 août 2008

Nouveautés dans java5

La nouvelle boucle for
5.0
for(variable de type : tableau){
corps
}

1.4
for( int i = 0 ; i
variable de type = tableau[i]
corps
}


Listes de tableaux génériques
5.0
ArrayList arrayList = new ArrayList();
arrayList.get(i);

1.4
ArrayList arrayList = new ArrayList();
type arrayList.get(i);


AutoBoxing
5.0
Integer entier = n;
int n = entier;

1.4
Integer entier = new Integer(n);
int n = entier.intValue();


Listes de paramètres Variables
5.0
maMethode(autres paramètres,p1,p2,p3 );

1.4
maMethode(autres paramètres, new Type[]{p1,p2,p3});

pour déclarer la fonction on utilise la syntaxe suivante par exemple :

String max(String nomTableau,double... valeurs) {
double leMax = Double.MIN_VALUE;
for (double v : valeurs) {
if (v > leMax) {
leMax = v;
}
}
return "le max des" +nomTableau+" est : "+leMax;
}


pour l'invoquer : max("Notes",5, 2, 54, 12, 35,62);

Type de retour covariants :
avant le jdk 5.0 , il n ete pas possible de modifier le type de retour quand on remplacer une fonction(dans notre cas , la fonction clone):
5.0
public Personne clone(){...}
...
Personne cloner = e.clone();
1.4
public Object clone(){...}
...
Personne cloner = (Personne) e.clone();


Importation static
5.0
import static java.lang.Math;
import static java.lang.System;
out.println(cos(45));

1.4
System.out.println(Math.cos(45));


Saisie à la console
la nouvelle classe Scanner ;)
Scanner in = new Scanner(System.in);
int entier = in.nextInt();
double nombre = in.nextDouble();
String chaine = in.nextLine();





mardi 5 août 2008

Les meuilleurs logiciels pour Linux

Skype : logiciel incontournable pour appeler ses amis
skype.com
aMsn : pour ceux qui ne peuvent pas se passer d'msn , c'est un excellent clone avec toutes les options du logiciels de chat de Microsoft et même plus ;)
amsn-project.net



VLC : on ne le présente plus , c'est le lecteur vidéo universel,il fait tout , de la lecture jusqu'à l'encodage ..
videolan.org

Beagle : un moteur de recherche évolué capable d'indexer toutes vos données et d'y ajouter des tags à votre guise.
beagle-project.org

Evolution : un client de courrie facile à utiliser et développé par Novell. Il permet l'utilisation de plusieurs protocoles dont le POP, SMTP, IMAP, Groupwise et bien d'autres. Il permet aussi la lecture de nouvelles de type USENET ainsi qu'un agenda avec la gestion des tâches et des contacts. Evolution est installé par défaut sur Ubuntu
gnome.org/projects/evolution



Gimp : acronyme de « GNU Image Manipulation Program », est un programme pour dessiner, peindre et éditer des images. Plusieurs des outils et des greffons (plugins) disponibles dans Gimp sont semblables à ceux d'Adobe Photoshop, ou d'autres éditeurs d'image. Gimp permet également d'utiliser des scripts pour les opérations et les manipulations d'images compatibles avec les langages libres de scripts.
gimp-fr.org

Kino : un logiciel de montage vidéo adapté aux débutants , dédié au montage vidéo numérique, il est le compagnon idéal de votre caméscope numérique DV. Kino est capable de lire et de réencoder n'importe quelle source vidéo si vous avez installé les paquets ffmpeg et mencoder. Attention toutefois, lors de l'importation de votre vidéo, Kino le transformera automatiquement au format dv (PAL ou NTSC, voir préférences), en en modifiant la résolution (720x576 ou 720x480) et le nombre d'images par seconde (25 ou 29,97).
kinodv.org

Wine : un programme qui permet d'utiliser des logiciels écrits pour Microsoft® Windows® sur d'autres systèmes d'exploitation (dans notre cas : GNU/Linux et donc Ubuntu). Le nom Wine est un acronyme récursif qui signifie Wine Is Not an Emulator (Wine n'est pas un émulateur) .
winehq.org


source

lundi 21 juillet 2008

Sortie de Netbeans 6.1




la nouvelle mouture de sun Netbeans 6.1 est sortie il y a quelque temps , voici une liste non-exhaustive des nouveautés :
  • Démarrage 40% plus rapide
  • Parsage plus rapide, donc auto complétion plus réactive
  • Moins de consommation de mémoire
  • Nouveau système de fenêtrage qui supporte la transparence.
  • Partage des librairies des projets: fonctionnalité similaire à celle d'eclipse
  • Possibilité d'associer les sources/Javadocs aux jars importés
  • Générateur de CRUD JSF
  • Autocomplemention du Javadoc
  • Suport de librairies comme Spring et Axis 2
  • Ainsi que divers bug fixes

lundi 4 février 2008

Customiser Votre Live-cd Ubuntu

on peut créer son propre live-cd d'ubuntu
c'est facile , il faut juste installé le paquet .deb sur le site officiel
après il suffit de suivre les menus , on peut changer la langue par défaut , les applications installées...

en résumé :
vous aurez votre cd perso, avec toute vos applications favorites par défaut que vous pourrez utiliser sur n'importe quel pc sans même l'installer.

télécharger ici