OVH Cloud OVH Cloud

[newbie][swing] JFrame s'aafiche mais vide...

6 réponses
Avatar
yvon.thoravalNO-SPAM
Bonjour,

je suis le livre "Swing la synthèse" et j'essaie l'exemple pp. 32-37 et,
comme expliqué p. 20 j'ai créé une classe pour tester cet exemple.

le prog se lane correctement mais n'affiche rien, je pense qu'il manque
qqc mais je ne vois pas du tout quoi.

la classe de test "TestBordures" :

public class TestBordures {
public static void main (String args[]) {
Bordures test = new Bordures();
test.show();
}
}

la classe "Bordures" :

import java.util.Vector;
import java.util.Enumeration;
import javax.swing.*;
import javax.swing.border.Border;

public class Bordures extends JFrame {
protected static final long DELAI = 700;
protected static final String TEXT_DU_BORDER = "Titre du border";
protected JLabel label = new JLabel();
protected Vector borders = new Vector();
protected Enumeration enum;

public Bordures() {
getContentPane().add(label);
}
public void borderSuivant() {
Border borderCourant;
if (enum == null || !enum.hasMoreElements()) {
enum = borders.elements();
} else {
borderCourant = (Border) enum.nextElement();
label.setBorder(borderCourant);
label.setText(borderCourant.getClass().getName());
}
}
public void alternerBorder() {
while (true) {
try {
Thread.sleep(DELAI);
} catch (InterruptedException e) {}
borderSuivant();
}
}
public void remplirListe() {
borders.add(BorderFactory.createEmptyBorder());
borders.add(BorderFactory.createEtchedBorder());
borders.add(BorderFactory.createLoweredBevelBorder());
borders.add(BorderFactory.createRaisedBevelBorder());
borders.add(BorderFactory.createTitledBorder(TEXT_DU_BORDER));
}
}


--
yt

6 réponses

Avatar
Esteban Rodriguez
(Yvon Thoraval) wrote in
news:1g95bdz.1ksvu8j5s8jojN%:

Bonjour,

je suis le livre "Swing la synthèse" et j'essaie l'exemple pp. 32-37 et,
comme expliqué p. 20 j'ai créé une classe pour tester cet exemple.

le prog se lane correctement mais n'affiche rien, je pense qu'il manque
qqc mais je ne vois pas du tout quoi.



Salut,

c'est le code de ton bouquin que tu as collé ou celui que tu as toi même
tapé ?

A priori je ne vois pas d'erreur, il devrait t'afficher au moins un label.
Peut-être que tu devrais mettre un setSize(300,200) dans le constructeur de
Bordures.

De, plus au lieu de show(), utilise setVisible(true). La méthode show() est
dépréciée.

Essaye ca et dis-moi si ca passe mieux.

@+

Avatar
yvon.thoravalNO-SPAM
Esteban Rodriguez wrote:

c'est le code de ton bouquin que tu as collé ou celui que tu as toi même
tapé ?



c'est le code du bouquin mes tapé par moi-même je veux dire que ce n'est
pas du cut'n paste; de plus, l'auteur ne donne pas directement
"TestBordures mais conseille, plus tôt ds le livre de procéder ainsi une
petite classe de test contenant un void main, donc j'ai juste adapter ce
pg de test à bordures, pour bordures je n'ai modifié que le nom de la
classe qui était à l'origine fenetre, pas suffisamment évocateur pour
moi.
A priori je ne vois pas d'erreur, il devrait t'afficher au moins un label.
Peut-être que tu devrais mettre un setSize(300,200) dans le constructeur de
Bordures.


bon maintenant j'ai bien une fenêtre de 300 x 200 hors tout avant
j'avais qqc de ridiculement petit.
De, plus au lieu de show(), utilise setVisible(true). La méthode show() est
dépréciée.
c'est fait mais je ne vois tjs pas de bordure, je dois dire que j'ai

vérifié au moins 10 fois mon java comparé au livre. J'ai envoyé un email
à l'auteur mais bon, c'est le we... il a bien un site ouèbe mais je n'y
ai rien vu à télécharger concernant swing.

--
yt

Avatar
jz
Yvon Thoraval wrote:
Bonjour,

je suis le livre "Swing la synthèse" et j'essaie l'exemple pp. 32-37 et,
comme expliqué p. 20 j'ai créé une classe pour tester cet exemple.

le prog se lane correctement mais n'affiche rien, je pense qu'il manque
qqc mais je ne vois pas du tout quoi.

...



La méthode alternerBorder() n'est jamais appelée, donc ton ton label n'a
pas de texte ni de bordure. Tu n'appelle pas non plus la méthode qui
crée la liste de bordures.

Voilà une version qui marche (un seul fichier, j'ai mis la main dans la
classe, à défaut de panier). J'ai aussi mis un s à enum(s) car java 1.5
n'en voulait pas et viré show() qui est déprécié. En plus on voit pas
bien la bordure animée car le label est placé n'importe comment dans la
frame. Ca fait quand même beaucoup pour un exemple de bouquin :(

Jacques




import java.util.*;
import javax.swing.*;
import javax.swing.border.Border;

public class Bordures extends JFrame {
protected static final long DELAI = 700;
protected static final String TEXT_DU_BORDER = "Titre du border";
protected JLabel label = new JLabel();
protected Vector borders = new Vector();
protected Enumeration enums;

public Bordures() {
setSize(300, 100);
getContentPane().add(label);
label.setText("coucou");
setVisible(true);
remplirListe();
alternerBorder();
}

public void borderSuivant() {
Border borderCourant;
if (enums == null || !enums.hasMoreElements()) {
enums = borders.elements();
} else {
borderCourant = (Border) enums.nextElement();
label.setBorder(borderCourant);
label.setText(borderCourant.getClass().getName());
}
}

public void alternerBorder() {
while (true) {
try {
Thread.sleep(DELAI);
} catch (InterruptedException e) {}
borderSuivant();
}
}

public void remplirListe() {
borders.add(BorderFactory.createEmptyBorder());
borders.add(BorderFactory.createEtchedBorder());
borders.add(BorderFactory.createLoweredBevelBorder());
borders.add(BorderFactory.createRaisedBevelBorder());
borders.add(BorderFactory.createTitledBorder(TEXT_DU_BORDER));
}

public static void main (String args[]) {
Bordures test = new Bordures();
}
}

Avatar
yvon.thoravalNO-SPAM
jz wrote:

Ca fait quand même beaucoup pour un exemple de bouquin :(


ben oui, je suis d'accord avec vous...
je regrette ma précipitation à acheter ce bouquin suite à conseil sur
fclj...


je viens de vérifier, ce n'est pas moi qui ait oublié :
remplirListe();
alternerBorder();

dans Bordures() ...

merci pour cette "correction"...


--
yt

Avatar
Vincent Brabant
jz wrote:


Ca fait quand même beaucoup pour un exemple de bouquin :(



ben oui, je suis d'accord avec vous...
je regrette ma précipitation à acheter ce bouquin suite à conseil sur
fclj...


je viens de vérifier, ce n'est pas moi qui ait oublié :
remplirListe();
alternerBorder();

dans Bordures() ...

merci pour cette "correction"...


Attention que remplirListe() et altenerBorder sont déclarées dans le bouquin comme étant des méthodes publiques.

Et je pense que l'auteur voulait que ce soit la classe de test qui fasse l'appel à ces méthodes.
Sinon, cela n'a pas de sens de les mettre public.

--
Vincent Brabant
----------------
http://www.netbeans.org/index_fr.html
http://vbrabant-fr.skynetblogs.be


Avatar
Yvon Thoraval
On Sun, 15 Feb 2004 9:41:24 +0100, Vincent Brabant wrote
(in message <402f3057$0$13256$):

Attention que remplirListe() et altenerBorder sont déclarées dans le bouquin
comme étant des méthodes publiques.


Ah oui bien vu !

Mais bon, l'aauteur ne donne pas la classe de test, je trouve que ce livre
n'est pas très pédagogique, enfin, disons que cette omission m'a appris
qqc...