Voir la version complète : splashscreen
Ok alors voilà le probleme auquel je suis confronté : il s'agit d'un projet d'interface graphique en java. Cette apli est censée demander au demarrage un login et un mot de passe, bon. Elle est egalement censée afficher un splashscreen de chargement, bon.
Le probleme c'est que l'authentification est censée se faire sur le splashscreen, donc dessiner les zones de texte et les boutons sur le splashscreen, aucun probleme pour ça mais impossible de cliquer sur ces elements. J'ai le forte impression que le splash screen n'est absolument pas cliquable donc je sais pas trop quoi faire.
Quelqu'un aurait-il une solution à me proposer ? Je crois pas qu'il soit possible d'afficher une fenetre de connexion puis un splashscreen de chargement.
deathangel
19/12/2006, 11h05
Salut,
comment tu fais pour afficher ton splashScreen ? perso je m'en étais créé un à partir d'une JFrame, si ca se trouve ca peut peut être remplacer ta solution
ça pourrai remplacer effectivement mais depuis la 1.6 java inclut une classe specifique splashscreen donc j'aimerai m'en servir (en plus c'est la consigne de mon projet :00000020: )
sinon comment tu t'en es servi de ta JFrame ?
je pense qu'il suffit de faire une JFrame sans bordure pour simuler un splash screen.
mais si tu es obliger d'utiliser la classe spéciale :s
bah ouais c'est ça qui m'emmerde parce que j'ai bien l'impression que le splashscreen tu peux y mettre ce que tu veux mais c'est impossible d'interagir avec.
sinon est ce possible de procéder avec une frame non décorée ? je peux afficher une JFrame comme faux splashscreen, d'abord avec les boutons et les champs pour rentrer les infos, puis avec la progressBar et enfin afficher la vraie fenetre de l'application. On peut faire ça ? affiche une premiere jframe puis la fermer pour en ouvrir une autre ?
desole mais je commence seulement à utiliser awt, swing et tout le bordel.
Arkanoid
19/12/2006, 14h39
C'est tout à fait possible de faire une frame non décorée avec des éléments dedans
Par contre si tu fais frame puis splashscreen, faut voir ce que ça donne, ça risque peut être de clignoter et de laisser deviner qu'il y a 2 fenêtres
Par contre c'est bizarre comme projet, d'un côté tu dois faire un splashscreen avec lequel intéragir mais de l'autre un splashscreen n'est pas fait pour intéragir (j'ai essayé juste un peu et j'ai rien vu à ce niveau)
d'ailleurs dans la doc rien ne laisse penser qu'il est possible de mettre des controles dessus.
Si tu es obliger d'utiliser getSplashScreen() c'est que ceux qui te demande çà n'ont pas essayé
deathangel
19/12/2006, 17h51
voila le code complet que j'utilise :
package vi50.projet.island.launcher;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class SplashScreen extends JFrame
{
/**
*
*/
private static final long serialVersionUID = -4257628784294491828L;
public final Runnable fermeture;
/**
* Constructeur d'un splashScreen
* @param fileName le nom de l'image à afficher
*/
public SplashScreen(String fileName)
{
super("");
//masquer la barre de titre
this.setUndecorated(true);
//créer un JLabel contenant l'image de splash
JLabel jlImage=new JLabel(new ImageIcon(fileName));
//créer un JPanel contenant le JLabel
JPanel jpImage=new JPanel(new BorderLayout());
jpImage.add(jlImage);
//récupérer les dimensions de l'écran et de l'image
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension labelSize = jlImage.getPreferredSize();
//centrer la fenêtre au milieu de l'écran
this.setLocation(screenSize.width/2 - (labelSize.width/2), screenSize.height/2 - (labelSize.height/2));
//ajouter l'image à la fenêtre
this.getContentPane().add(jpImage);
//recalculer la taille de la fenêtre
this.pack();
//création du processus de fermeture
fermeture = new Runnable()
{
public void run()
{
setVisible(false);
dispose();
}
};
// afficher la frame
this.setAlwaysOnTop(true);
this.setVisible(true);
}
}
et une fois tout le chargement fini, j'utilise un :
SwingUtilities.invokeAndWait(screen.fermeture);
avec screen, instance de la SplashScreen pour masquer la fenêtre depuis mon autre fonction
j'ai pas encore regardé la SplahScreen de la 1.6 mais à mon avis ils l'ont pas concu dans le but d'avoir une fenêtre "modifiable".
je jetterais un oeil dès que j'ai un peu de temps
merci pour vos infos, je me suis un peu inspiré du code de deathangel, la bidouille pour laquelle je me suis finalement decidé :
un vrai splashscreen au demarrage avec la classe prevue a cet effet, puis un faux splashscreen avec la meme image et un layeredpane pour mettre en fond l'image et en avant plan les boutons et champs de connexion.
ça fonctionne bien.
D'un autre côté, un splashscreen, c'est tellement em******* pour l'utilisateur...
deathangel
26/12/2006, 22h53
D'un autre côté, un splashscreen, c'est tellement em******* pour l'utilisateur...
ben dès fois c'est sympa pour montrer que ca charge, et pas que ca tourne dans le vent (cf eclipse avec barre de progression)
Oui.
Mais d'autres programmes chargent vite leur interface, puis indiquent qu'ils chargent les modules restants.
Mais vraiment, VRAIMENT, s'il-vous-plait, à genoux, tout ça : si vous faites du splashscreen, ne le mettez JAMAIS en premier plan invirable.
Ça, c'est le pire du pire. À croire que ceux qui font des applications avec de tels splashscreen sont persuadés qu'on n'utilise notre machine que pour cette application.
Et comme justement c'est généralement une application qui met du temps à démarrer, on se retrouve avec un desktop inutilisable pendant un bon bout de temps.
Pire, certains arrivent à suivre les bureaux virtuels ! Vraiment mesquins ceux-là.
Allez, non, il y a pire : les splashscreens qui font tout ça, mais qui en plus n'indiquent strictement sur l'avancement du chargement.
deathangel
27/12/2006, 18h03
ah vi en effet, de ce côté là je suis entièrement d'accord avec toi pour ces extrêmes ;)
vBulletin® v.3.6.5, Copyright ©2000-2010, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org