Bonjour à tous. Svp comment fixer la durée d'affichage d'une image en java?
Version imprimable
Bonjour à tous. Svp comment fixer la durée d'affichage d'une image en java?
Salut,
Il va falloir nous en dire plus, parce que ta question est très vague : tu n'indiques même pas si c'est dans une application desktop (à priori, mais ça pourrait être web), ni même l'environnement graphique (Swing, JavaFX, SWT ?), et un peu de contexte fonctionnel ne serait pas du luxe non plus (elle doit s'afficher où cette image ? Au milieu d'une UX existante, toute seule au milieu du bureau, en pleine écran, autrement, bref, où, comment ? Sinon la réponse sera aussi courte que la question : "en gros, le principe est un timeout..."
Bonsoir.
Au fait je l'ai mis dans un JFRAME. J'ai mis une image en fond de la fenêtre en utilisant la fonction setContentPane. Maintenant je voudrais qu'au bout d'un temps l'image disparaisse. J'ai fait appel Swing, awt, ... au début du programme.
Merci de m'aider
Pour ça tu utiliser un Timer Swing (javax.swing.Timer).
suprimeImage() est une méthode que tu dois écrire et qui va retirer l'image que tu as ajoutée au contentpane. C'est un ActionListener, donc tu fais comme si devais faire un code qui enlève l'image en cliquant sur un bouton par exemple.Code:
1
2
3
4
5 long delay = /* le nombre de milliseconde au bout duquel tu veux que l'image disparaisse */ Timer timer = new Timer(delay, e-> supprimeImage()); timer.setRepeats(false); // pour que ça le fasse qu'une seule fois timer.start()
Comme tu as utilisé setContentPane(), il va falloir que tu remplaces l'image, en appelant setContentPane() en lui passant par exemple un JPanel vide (donc juste setContentPane(new JPanel());
Merci beaucoup. Au fait, le code marche mais l'image ne disparaît pas. Svp je fais comment ?
Montre-moi ton code.
J'ai mis int comme type à la durée puisque le type long produit une erreur. Voila le code:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 JFrame fen=new JFrame(); Image icone = Toolkit.getDefaultToolkit().getImage("C:\\Users\\HPPRO\\IdeaProjects\\untitled\\src\\Logo_harold.png"); fen.setIconImage(icone); fen.setSize(619,642); fen.setTitle("Hpera"); fen.setVisible(true); JLabel iMage=new JLabel(new ImageIcon("C:\\Users\\HPPRO\\IdeaProjects\\untitled\\src\\Logo_harold.png")); fen.setContentPane(iMage); fen.setResizable(false); fen.setVisible(true); int delay= 2000; Timer timer=new Timer(delay, e-> fen.setContentPane(new JPanel()) ); timer.setRepeats(false); timer.start();
C'est parce qu'on est obligé de forcer le rafraîchissement ici (je ne sais pas pourquoi sur ce cas Swing ne semble pas le faire automatiquement, alors qu'il le pourrait).
Code:
1
2
3
4
5
6 Timer timer=new Timer(delay, e-> { fen.setContentPane(new JPanel()); fen.revalidate(); } );
Pour des raisons de perfs, on ne recalcule pas automatiquement en cas d'ajout / suppression, car d'autres pourraient suivre et ces calculs complexe deviendraient immédiatement obsolètes. Imagine le calcul si tu dois virer / ajouter 200 composants. 199 calculs de layout inutiles ;)