CyberDenix
Messages postés17Date d'inscriptionlundi 6 octobre 2003StatutMembreDernière intervention24 décembre 2007
-
8 juin 2005 à 00:58
CyberDenix
Messages postés17Date d'inscriptionlundi 6 octobre 2003StatutMembreDernière intervention24 décembre 2007
-
8 juin 2005 à 15:46
Bonjour,
Je créé une JFrame dans la quelle j'insere 2 JPanels contenant chacun une image .png (insertion de A, puis de B), chacun ayant un setOpaque (false). Leur fond est donc censé etre transparent.
Le JPanel A contient une carte du monde.
Le JPanel B contient un nuage que je fais bouger dans la methode paint().
Pourtant seul le JPanel B semble s'afficher.
En réalité, je pense que A est affiché mais qu'il est masqué par B.
En effet, le fond du JPanel B n'est pas transparent malgré le setOpaque(false).
J'ai essayé de dessiner les deux images dans un meme JPanel, cela marche sans probleme.
Mais je voudrais les afficher dans des panels différents afin de ne redessiner que le panel de B.
Ainsi j'éviterai de redessiner la carte du monde pour rien, car seul le nuage bouge.
Que faire ?
safisoft
Messages postés489Date d'inscriptionvendredi 30 janvier 2004StatutMembreDernière intervention13 mai 20096 8 juin 2005 à 10:17
je X que tu dois jouer sur le backgroundcolor du panel B, tu pe utiliser une couleur Color(r,g,b,alpha) et tu joue sur le dernier paramètre pour la transparence
CyberDenix
Messages postés17Date d'inscriptionlundi 6 octobre 2003StatutMembreDernière intervention24 décembre 2007 8 juin 2005 à 11:22
--------------------------------- La carte du monde :
public class PanelAvecFond extends JPanel
{
Image backGround = null;
public PanelAvecFond(Image backGround)
{
this.backGround = backGround;
setOpaque( false );
}
public void paint(Graphics buffer)
{
if (backGround != null)
buffer.drawImage( backGround, 0, 0, getSize().width, getSize().height, this);
super.paint(buffer);
}
public void update( Graphics g )
{ paint(g); }
public static Image loadImages(JFrame frm, String imageFile )
{...}
public static URL getURL( String file )
throws MalformedURLException
{...}
}
------------------------------------------- Les nuages (enfin le brouillard quoi) :
public class PanelFog extends JPanel
{
Image fog = null;
public PanelFog(Image fog)
{
this.fog = fog;
setOpaque( false );
}
public void paint(Graphics buffer)
{
super.paint(buffer); //Mise ici j'ai les boutons de mon menu dessous les nuages
if (fog != null)
{ draw_fog(buffer, ...); }
//super.paint(buffer); //Mise ici j'ai les boutons de mon menu par dessus les nuages
}
public void update( Graphics g )
{ paint(g); }
public void draw_fog(Graphics buffer, ...)
{ ... }
}
-------------------------------------- Le menu principal avec les boutons et les deux JPanels :
public class EcranTitre extends JFrame
{
RenderingThread renderingThread = new RenderingThread(); // boucle d'affichage
private JPanel pnl_map;
private JPanel pnl_fog;
private JButton btn1;
public EcranTitre(...)
{
this.getContentPane().setLayout( new BorderLayout() );
pnl_map = new PanelAvecFond(PanelAvecFond.loadImages(this, "images/splash_map.png"));
pnl_fog = new PanelFog(PanelAvecFond.loadImages(this, "images/splash_fog_3072.png"));
pnl_map.setLayout(null);
pnl_fog.setLayout(null);
CyberDenix
Messages postés17Date d'inscriptionlundi 6 octobre 2003StatutMembreDernière intervention24 décembre 2007 8 juin 2005 à 15:46
Bon la réponse m'intéresse toujours pour des soucis de performance, mais je me suis résigné à tout dessiné dans le meme JPanel. ca rame légèrement, mais bon... Jvois pas d'autre solution étant donné qu'un JPanel semble en masquer un autre.