Bonjour,
Certains étudiants de deuxième année ont attiré mon attention sur le fait que les panels dont la couleur avait un certain degré de transparence ( alpha ) ne s'affichaient pas bien. C'est particulièrement vrai pour les Panels qu'on dessine nous-mêmes ( dessin sur mesure ).
Pourquoi ?
Cela a rapport à l'opacité qui, par défaut, est complète sur les JPanels ( la propriété opaque est à true ) . Cela cause une contradiction avec une couleur de fond qui n'est pas totalement opaque.
Solution ?
1. La solution facile est d'assigner la couleur de fond à l'objet représentant la surface de dessin plutôt que dans la redéfinition de la méthode paintComponent :
Ex.
SurfaceDessin sd;
// dans le constructeur du JFrame
...
sd = new SurfaceDessin();
sd.setBounds( 10,10,200,200 );
sd.setBackground ( new Color ( 23,56, 100, 80 );
getContentPane().add(sd);
2. Une solution plus permanente existe, mais elle est plus longue à réaliser. Elle consiste à placer la surface de dessin ( ou un autre JPanel ) complètement transparent ( setOpaque( false )) et de dessiner une grand rectangle occupant toute la surface du JPanel et d'appliquer la couleur ayant un degré de transparence à ce rectangle. Donc dans le paintComponent, ça donne :
protected void paintComponent ( Graphics g )
{
g.setColor( getBackground() );
g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}
et dans le constructeur :
//ajouter la surface de dessin
sd = new SurfaceDessin();
sd.setBounds( 10, 140, 300, 200);
sd.setOpaque(false);
sd.setBackground( new Color(255, 0, 0, 20) );
getContentPane().add(sd);
Affichage des articles dont le libellé est Java. Afficher tous les articles
Affichage des articles dont le libellé est Java. Afficher tous les articles
jeudi 5 février 2015
dimanche 21 septembre 2014
à quoi sert le @override
Bonjour,
Dans le code Java pour Android ( et même dans le code java tout court ), on voit de plus en plus des @override apparaître lorsqu'on met en oeuvre une interface entre autres. Est-ce obligatoire ? non, mais cette annotation a son importance ne serait-ce que pour nous éviter de faire une faute de frappe lorsqu'on redéfinit une méthode.
En effet, la présence de @override nous assure que la méthode qu'on redéfinit aura la bonne syntaxe. Dans le cas où on ferait une erreur du genre ( pour le développement Android ):
@Override
public void onCreat(Bundle savedInstanceState) {
}
le compilateur nous avertirait qu'on a oublier un 'e' à onCreate ( plutôt que de penser que c'est une nouvelle méthode qu'on veut coder.
Dans le code Java pour Android ( et même dans le code java tout court ), on voit de plus en plus des @override apparaître lorsqu'on met en oeuvre une interface entre autres. Est-ce obligatoire ? non, mais cette annotation a son importance ne serait-ce que pour nous éviter de faire une faute de frappe lorsqu'on redéfinit une méthode.
En effet, la présence de @override nous assure que la méthode qu'on redéfinit aura la bonne syntaxe. Dans le cas où on ferait une erreur du genre ( pour le développement Android ):
@Override
public void onCreat(Bundle savedInstanceState) {
}
le compilateur nous avertirait qu'on a oublier un 'e' à onCreate ( plutôt que de penser que c'est une nouvelle méthode qu'on veut coder.
lundi 28 avril 2014
Java - Liste des polices installées sur l'ordinateur
On peut obtenir cette liste à l'aide d'un objet GraphicsEnvironment
GraphicsEnvironment gEnv = GraphicsEnvironment .getLocalGraphicsEnvironment();
String polices[] = gEnv.getAvailableFontFamilyNames();
for (int i = 1; i < polices.length; i++)
combo.addItem(polices[i]);
Merci à Marc-André B. pour la question et au site http://www.java-tips.org/ pour la solution
Java - Placer le curseur à la fin d'un texte
La sérialisation permet de conserver l'état d'un objet dans un fichier afin de pouvoir le récupérer. Certaines propriétés ne font pas partie de l'état de l'objet sérialisé; entre autres l'emplacement du curseur sur une zone de texte.
On peut placer le curseur à la fin du texte contenu dans la zone de texte de cette façon :
zoneTexte.setCaretPosition ( zoneTexte.getText().length());
où zoneTexte est un objet JTextArea
Merci à Julien M. pour la question et à Gabriel B. pour une solution.
jeudi 28 novembre 2013
Java : transformer un tableau en Vector
Bonjour,
La classe Arrays contient plusieurs méthodes utilitaires pour travailler avec les tableaux ( trier, copier une partie d'un tableau dans un autre, etc ) . La méthode asList est intéressante car elle permet de transformer un tableau en un objet List :
String [] tab = {"un", "deux", "trois" };
List liste = Arrays.asList(tab);
On peut transformer une List en Vector à l'aide d'un constructeur :
Vector v = new Vector ( liste );
La classe Arrays contient plusieurs méthodes utilitaires pour travailler avec les tableaux ( trier, copier une partie d'un tableau dans un autre, etc ) . La méthode asList est intéressante car elle permet de transformer un tableau en un objet List :
String [] tab = {"un", "deux", "trois" };
List
On peut transformer une List en Vector à l'aide d'un constructeur :
Vector
vendredi 31 mai 2013
Pour en finir avec le modificateur static...
Bonjour,
D'abord les définitions...
Une variable static ( qu'on appelle parfois une variable de classe ) est une variable qui nécessite qu'un espace en mémoire pour stocker sa valeur plutôt qu'un espace en mémoire par objet créé, ce qui est le cas pour les variables d'instance.
Par exemple, pour une classe EtudiantCegep, les variables nom et matricule ne sont pas static car chaque objet a son nom et son matricule propre; on a besoin d'un espace-mémoire par objet pour stocker ces informations. Nom et matricule sont des variables d'instance.
Cependant, les variables menuCafeteria et accèsALaBibliotheque sont des variables static car leur valeur est la même, à un instant donné, pour tous les objets EtudiantCegep ( l'accès à la bibliothèque vaut true pour tous les objets en même temps , le menuCafeteria est le même pour tous les étudiants un jour donné ) . On a donc besoin d'un seul espace mémoire pour l'ensemble de la classe pour stocker ces infos; ce sont des variables de classe.
Une méthode static est une méthode dont le résultat est indépendant des variables d'instance d'une classe.
Par exemple, une méthode calculerMoyenneCoursMaths n'est pas une méthode static car son résultat dépend des notes de chacun des étudiants.
Par contre, on pourrait considérer une méthode assignerCasier une méthode static car on assigne pas un casier en fonction du nom, du matricule ou du revenu d'un étudiant...
Les constantes
Les constantes ont tjrs le modificateur static car, par définition, une constante n'a besoin qu'un espace mémoire pour toute la classe ( on a pas besoin de stocker la même valeur dans 1000 objets créés à partir de cette classe )
On peut donc accéder à une constante directement en la précédant du nom de la classe d'où elle vient ( Ex. Font.BOLD )
De la même manière, on peut accéder à une variable statique : Ex: EtudiantCegep.accesBibliotheque ( vaut true ou false pour l'ensemble des étudiants à un instant donné de la semaine )
Une variable statique peut également être un objet, tel un objet Hashtable ( comme dans le TP 2 )
Quand les variables statiques ou les constantes sont initialisées ?
Elles sont chargées en mémoire lors de l'exécution du programme; quand la classe dont les variables font partie est chargée dans la machine virtuelle Java ( en étant présente dans le code d'une classe par exemple ) , ses membres statiques le sont également et sont donc accessibles à tous, que ce soit des objets ou des variables de type prédéfini.
. Par exemple ,
import java.awt.Point;
public class ClasseEssai {
public static Point variableDeClasse = new Point ( 2,3);
}
l'objet Point sera créé dès que cette classe est chargée en mémoire
public class Class1 {
public static void main(String[] args) {
System.out.println(ClasseEssai.variableDeClasse.getX());
}
}
"2" sera affiché.
Peut-on donner le modificateur static à une classe ?
Très rarement, uniquement dans le cas d'une classe interne...c'est un cas assez rare, vous aurez de l'information sur le site d'Oracle ici
Merci à Monique H. pour une expérimentation similaire.
D'abord les définitions...
Une variable static ( qu'on appelle parfois une variable de classe ) est une variable qui nécessite qu'un espace en mémoire pour stocker sa valeur plutôt qu'un espace en mémoire par objet créé, ce qui est le cas pour les variables d'instance.
Par exemple, pour une classe EtudiantCegep, les variables nom et matricule ne sont pas static car chaque objet a son nom et son matricule propre; on a besoin d'un espace-mémoire par objet pour stocker ces informations. Nom et matricule sont des variables d'instance.
Cependant, les variables menuCafeteria et accèsALaBibliotheque sont des variables static car leur valeur est la même, à un instant donné, pour tous les objets EtudiantCegep ( l'accès à la bibliothèque vaut true pour tous les objets en même temps , le menuCafeteria est le même pour tous les étudiants un jour donné ) . On a donc besoin d'un seul espace mémoire pour l'ensemble de la classe pour stocker ces infos; ce sont des variables de classe.
Une méthode static est une méthode dont le résultat est indépendant des variables d'instance d'une classe.
Par exemple, une méthode calculerMoyenneCoursMaths n'est pas une méthode static car son résultat dépend des notes de chacun des étudiants.
Par contre, on pourrait considérer une méthode assignerCasier une méthode static car on assigne pas un casier en fonction du nom, du matricule ou du revenu d'un étudiant...
Les constantes
Les constantes ont tjrs le modificateur static car, par définition, une constante n'a besoin qu'un espace mémoire pour toute la classe ( on a pas besoin de stocker la même valeur dans 1000 objets créés à partir de cette classe )
On peut donc accéder à une constante directement en la précédant du nom de la classe d'où elle vient ( Ex. Font.BOLD )
De la même manière, on peut accéder à une variable statique : Ex: EtudiantCegep.accesBibliotheque ( vaut true ou false pour l'ensemble des étudiants à un instant donné de la semaine )
Une variable statique peut également être un objet, tel un objet Hashtable ( comme dans le TP 2 )
Quand les variables statiques ou les constantes sont initialisées ?
Elles sont chargées en mémoire lors de l'exécution du programme; quand la classe dont les variables font partie est chargée dans la machine virtuelle Java ( en étant présente dans le code d'une classe par exemple ) , ses membres statiques le sont également et sont donc accessibles à tous, que ce soit des objets ou des variables de type prédéfini.
. Par exemple ,
import java.awt.Point;
public class ClasseEssai {
public static Point variableDeClasse = new Point ( 2,3);
}
l'objet Point sera créé dès que cette classe est chargée en mémoire
public class Class1 {
public static void main(String[] args) {
System.out.println(ClasseEssai.variableDeClasse.getX());
}
}
"2" sera affiché.
Peut-on donner le modificateur static à une classe ?
Très rarement, uniquement dans le cas d'une classe interne...c'est un cas assez rare, vous aurez de l'information sur le site d'Oracle ici
Merci à Monique H. pour une expérimentation similaire.
mercredi 29 mai 2013
Modifier la couleur de fond des entêtes de colonnes d'une JTable
On doit recourir au JTableHeader...
table.getTableHeader().setBackground ( ... )
où table est votre objet JTable
mardi 28 mai 2013
Une nouvelle utilisation du CardLayout
Nous avons vu que le layout CardLayout peut être utile lorsqu'on veut passer d'un conteneur à un autre en employant des méthodes telles que first, next, etc. De cette manière, on peut afficher différents contenus sans se soucier des problème d'affichage / rafraîchissement.
Qu'en est-il si les conteneurs à afficher ne se suivent pas ? On peut associer à chaque conteneur faisant partie du cardLayout un tag à l'aide de la méthode addLayoutComponent. Ce tag sera utile pour afficher ce conteneur à l'aide de la méthode show.
cardLayout1.addLayoutComponent(jPanel1, "panel inscription");
cardLayout1.addLayoutComponent(jPanel2, "panel branchement");
cardLayout1.addLayoutComponent (jPanel3, "panel deconnexion");
Merci à Steve T. pour la collaboration.
Qu'en est-il si les conteneurs à afficher ne se suivent pas ? On peut associer à chaque conteneur faisant partie du cardLayout un tag à l'aide de la méthode addLayoutComponent. Ce tag sera utile pour afficher ce conteneur à l'aide de la méthode show.
cardLayout1.addLayoutComponent(jPanel1, "panel inscription");
cardLayout1.addLayoutComponent(jPanel2, "panel branchement");
cardLayout1.addLayoutComponent (jPanel3, "panel deconnexion");
J'assigne un tag à chaque panel faisant partie du CardLayout
cardLayout1.show(FrameCardLayout.this.getContentPane(), "panel inscription");
On peut ainsi rendre visible un panel sans passer par plusieurs appels à next()
Merci à Steve T. pour la collaboration.
lundi 10 décembre 2012
Des exemples d'applications utilisant des Applets
Les applets sont encore bien présents sur le web. Voici quelques applications que j'utilise parfois :
1. Wordle ( http://www.wordle.net/ ) : Wordle est une petite application basée sur un Applet Java et permettant de générer un nuage de mots-clés, tel qu'on en voit de plus en plus sur le web.
2. ThinkFree ( http://member.thinkfree.com/member/goLandingPage.action ) : Un logiciel basé sur un Applet permettant d'ouvrir des fichiers Office sur le web, sans avoir le logiciel Word ou Excel sous la main .
3. Le site du Collège ( http://www.cvm.qc.ca/activitesservices/dti/Pages/CVMLienUtiles.html ) fournir un Applet permettant d'accéder aux lecteurs U, V et X à partir de la maison :
1. Wordle ( http://www.wordle.net/ ) : Wordle est une petite application basée sur un Applet Java et permettant de générer un nuage de mots-clés, tel qu'on en voit de plus en plus sur le web.
2. ThinkFree ( http://member.thinkfree.com/member/goLandingPage.action ) : Un logiciel basé sur un Applet permettant d'ouvrir des fichiers Office sur le web, sans avoir le logiciel Word ou Excel sous la main .
3. Le site du Collège ( http://www.cvm.qc.ca/activitesservices/dti/Pages/CVMLienUtiles.html ) fournir un Applet permettant d'accéder aux lecteurs U, V et X à partir de la maison :
mardi 6 novembre 2012
Java - espace insécable dans l'affichage
La classe DecimalFormat permet d'afficher un nombre décimal selon un modèle donné. SI vous voulez ajouter à votre modèle un espace insécable entre les milliers et les centaines vous pouvez ajouter à votre modèle une virgule.
Par exemple,
DecimalFormat df = new DecimalFormat("0,000.00"); // donnera un espace entre les milliers et les centaines
System.out.println ( df.format ( 5678.89));
L'affichage de ce nombre sera donc : 5 678.89. avec un espace !
Merci à Marc-André D. pour la curiosité / l'info.
Par exemple,
DecimalFormat df = new DecimalFormat("0,000.00"); // donnera un espace entre les milliers et les centaines
System.out.println ( df.format ( 5678.89));
L'affichage de ce nombre sera donc : 5 678.89. avec un espace !
Merci à Marc-André D. pour la curiosité / l'info.
lundi 19 décembre 2011
JAVA : placer des icônes sur des JButtons, placer des images/icônes dans la barre de titre de la fenêtre
Pour placer un icône sur un JButton :
boutonStop.setIcon(new ImageIcon ( "logo.jpg"));
Pour placer un icône ( image ) sur la barre de titre de la fenêtre :
this.setIconImage(Toolkit.getDefaultToolkit().getImage("logo.jpg"));
boutonStop.setIcon(new ImageIcon ( "logo.jpg"));
Pour placer un icône ( image ) sur la barre de titre de la fenêtre :
this.setIconImage(Toolkit.getDefaultToolkit().getImage("logo.jpg"));
dimanche 17 avril 2011
Une fenêtre JFrame plein écran
Un de vos collègues m'a demandé comment faire en sorte que le JFrame qu'on code soit plein écran, genre de détail qu'on a tendance à oublier...
Plusieurs façons sont possibles, j'aime bien coder dans le main de mon application :
fr.setExtendedState ( JFrame.MAXIMIZED_BOTH); où f est bien sûr la référence à l'objet JFrame que vous voulez afficher.
Plusieurs façons sont possibles, j'aime bien coder dans le main de mon application :
fr.setExtendedState ( JFrame.MAXIMIZED_BOTH); où f est bien sûr la référence à l'objet JFrame que vous voulez afficher.
lundi 14 février 2011
Se débarasser de la "QuickDoc" avec JDeveloper
vendredi 28 janvier 2011
changer l'apparence d'un curseur en Java
Un détail...si vous voulez changer l'apparence du curseur, utiliser la classe Cursor :
jeudi 4 février 2010
Dessin personnalisé en Java - Le contexte graphique Graphics2D en permet beaucoup plus
Pour faire du custom drawing en Java , on utilise souvent le contexte graphique de base soit la classe Graphics. Cependant, une sous-classe de celle-ci, Graphics2D permet de réaliser des dessins beaucoup plus riches. Gradients, Antialiasing sont entre autres accessibles. On peut aisément réaliser quelque chose comme l'image ci-haut
mercredi 1 avril 2009
MediaTracker - pour s'asuurer que les images sont bien chargées
La Classe MediaTracker est une classe utilitaire que j'utilise entre autres lorsque je veux m'assurer que des images sont bien chargées avant de les dessiner. Parfois, le délai est si court entre le chargement de l'image ( getImage ) et son dessin ( drawImage ) que l'applcation jette les gants et ne dessine pas l'image sans toutefois générer aucun message d'erreur.
On doit donc ajouter les images dans le MediaTracker à l'aide de la méthode addImage auquel on ajoute un identifiant. Le MediaTracker va attendre que l'image à l'identifiant soit chargée pour permettre que le programme continue.
Ex. :
MediaTracker tracker=new MediaTracker(this); // dans une méthode
tracker.addImage(ii,0); // ajoute l'image ii au MediaTracker
try {
tracker.waitForID(0); //attend que l'image avec l'identifiant 0 soit chargée
}
catch(InterruptedException e)
{
e.printStackTrace();
}
On doit donc ajouter les images dans le MediaTracker à l'aide de la méthode addImage auquel on ajoute un identifiant. Le MediaTracker va attendre que l'image à l'identifiant soit chargée pour permettre que le programme continue.
Ex. :
MediaTracker tracker=new MediaTracker(this); // dans une méthode
tracker.addImage(ii,0); // ajoute l'image ii au MediaTracker
try {
tracker.waitForID(0); //attend que l'image avec l'identifiant 0 soit chargée
}
catch(InterruptedException e)
{
e.printStackTrace();
}
Inscription à :
Articles (Atom)




