Cette page de travail regroupe les elements mis en oeuvre pendant le stage de
BriceColucci (avril-juin 2008).
Suite à ce stage, une page de documentation regroupe l'ensemble des fonctionnalités qui ont été intégrées dans le module
JMCS.
Liens utiles
Objectif : Réunir au sein d'un même module logiciel facilement réutilisable, un maximum de fonctionnalités
partagées par
toutes les applications graphiques JAVA du JMMC
Les points du cahier des charges (CCH)
- (1) Uniformiser les interfaces => factorisation du code
- (2) Uniformiser l'utilisation des logiciels
- (3) Maximiser l'intégration aux principaux SE
- (4) Améliorer la finition graphique des interfaces
- (5) Faciliter la maintenance => factorisation du code
Le framework SWING appFramework
Ce framework peut être décrit sous la forme de deux cercles concentriques.
- Le noyau : C'est l'application avec les procédures suivantes : launch(), startup(), exit() et shutdown()
- Le contexte : Les données disponibles hors application, celles de l'application, le gestionnaire d'actions, le gestionnaire de ressources et le service de tâches.
Comment on utilise appFramework?
Au minimum, on doit :
- Dériver notre interface graphique (IG) de Application
- Surcharger la méthode startup() et appeler setVisible()
- Lancer launch() de la classe Application avec en paramètre le nom de notre IG
De ces points on conclue que :
- Il y a une factorisation importante du code, ce qui répond au besoins (1), (2) et (5) du CCH
Le gestionnaire de ressources
Voici un exemple de contenu d'un fichier de ressources d'une interface graphique appFramework :
label.opaque = true
label.background = 0, 0, 0
label.foreground = 255, 255, 255
label.text = Hello World
label.font = Lucida-PLAIN-48
label.icon = earth.png
Et le code correspondant :
public class SingleFrameExample2 extends SingleFrameApplication {
public void startup(String[] args) {
JLabel label = new JLabel();
label.setName("label");
show(label);
}
public static void main(String[] args) {
launch(SingleFrameExample2.class, args);
}
}
Résultat :
Ce système de gestion des ressources répond au besoin (1) et (5)
Code that scan a class methods:
import java.lang.reflect.Method;
private void launchSetPropertiesMethods() {
String className = "fr.jmmc.mcs.gui.AboutBoxView";
String chSequence = "setResizable";
try {
Class classToApply = Class.forName(className);
Method[] methods = classToApply.getMethods();
for(int i=0; i<methods.length; i++) {
Method method = methods[i];
String methodName = method.getName();
if(methodName.contains(chSequence)) {
method.invoke(obj_, true);
}
}
} catch(Exception ex) {
ex.getMessage();
}
}