2 BorderLayout + 1 image... ca fait trop pour moi :( [Résolu]

Signaler
Messages postés
152
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
8 octobre 2008
-
safisoft
Messages postés
490
Date d'inscription
vendredi 30 janvier 2004
Statut
Membre
Dernière intervention
13 mai 2009
-
Bonjour,

J'implore par avance le pardon de tous ceux qui vont trouver ma question stupide, mais j'ai beaucoup de mal à encpasuler les grids,panel,images etc....

J'ai fait un petit applet pour m'amuser et surtout comprendre comment enbcapsuler 2 border layout l'un dans l'autre et une image au centre

J'ai fini par m'en sortir en ce qui concene l'enpilement des BorderLayout, mais je ne trouve pas le moyen de mettre mon image dans le "Center" du second BorderLayout

Voici mon code (qui est faux) mais qui vous aidera a comprendre ce que je veux faire... par pitié aidez moi !!!

import java.awt.*;


public class Border2 extends java.applet.Applet implements Runnable{


BorderLayout Bord_A= new BorderLayout();
BorderLayout Bord_B= new BorderLayout();
Panel pane=new Panel();

Button N1=new Button("N1");
Button S1=new Button("S1");
Button E1=new Button("E1");
Button O1=new Button("O1");
Button C1=new Button("C1");


Button N2=new Button("N2");
Button S2=new Button("S2");
Button E2=new Button("E2");
Button O2=new Button("O2");
Button C2=new Button("C2");

Image imgTmp;
Graphics gTmp;

public void init(){

imgTmp = createImage(1000, 400);
gTmp = imgTmp.getGraphics();
setBackground(Color.white);

pane.setLayout(Bord_B);
pane.add("North", N2);
pane.add("South", S2);
pane.add("East", E2);
pane.add("West", O2);
pane.add("Center", imgTmp); <- La ca gueule !!!


setLayout(Bord_A);
add("North", N1);
add("South", S1);
add("East", E1);
add("West", O1);
add("Center", pane);

}
public Border2() {
Thread tr = new Thread(this);
tr.start();
}
public void run(){
while (true) {
repaint();
}
}
public void update(Graphics g){paint(g);}


public void paint(Graphics gsp){


gsp.drawImage(imgTmp,0,0,this);
}
}

8 réponses

Messages postés
152
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
8 octobre 2008

J'ai déplace les lignes du constructeur

imgTmp = createImage(1000, 400);
gTmp = imgTmp.getGraphics();
setBackground(Color.black);

vers la fonction paint() et ca marche ... je ne sais pas pourquoi ni si c'etait la meilleure solution mais bon :) je vous remercie 1000000 fois pour votre aide.
Messages postés
750
Date d'inscription
mardi 9 mars 2004
Statut
Membre
Dernière intervention
23 décembre 2008
18
Slut,

il me semble qu'il faut mettre "middle" à la place de "center"

sinon, si tu veux sûr de ton coup, tu fais les déclarations suivantes :



setLayout(new BorderLayout());

add(new Button("Nord"), BorderLayout.NORTH);

add(new Button("Sud"), BorderLayout.SOUTH);

add(new Button("Est"), BorderLayout.EAST);

add(new Button("Ouest"), BorderLayout.WEST);

add(new TextArea("Zone de texte centrale"), BorderLayout.CENTER);



voilà

le monde a des idées : la preuve, c'est qu'il y en a de mauvaises
ne comprends pas tout, mais je parle de tout : c'est ce qui compte
Messages postés
490
Date d'inscription
vendredi 30 janvier 2004
Statut
Membre
Dernière intervention
13 mai 2009
2
le pbm c'est que Image ne descend pas de "Component" alors pour ce faire tu pe créer ton propre Component Image:

class MonImage extends java.awt.Canevas{
Image img;
public MonImage(String Path){
img=createImage(1000, 400); //normalement ton image tu dois la construire à partir d'un path (fichier image gif, jpg)
this.setBounds(........); //tu pe te baser sur les dimensions de img
}

public void paint(Graphics g){
g.drawImage(img,0,0,this);
}
}

et pour ta classe principale je sé pas si t'as vraiment besoin d'inserrer des "Button" sinon u pe inserer des canvas ou des Panel et fixer leurs dimensions. pour l'image tu met tous simplement:


pane.add(BorderLayout.CENTER,new MonImage("..../..../.....jpg");
Messages postés
490
Date d'inscription
vendredi 30 janvier 2004
Statut
Membre
Dernière intervention
13 mai 2009
2
dsl GT en retard!
mais pour l'insertion tu pe utiliser add("Center",<Component>) oubien add(<Component>, BorderLayout.CENTER) c'est kif kif.
Messages postés
152
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
8 octobre 2008

C'est vrai qu'il est stupide de totu vouloir faire dans la meme class...
Pour répondre aux questions plus haut, la présence de boutons est juste la pour simuler d'autres éléments d'une interface.
En fait d'image, c'est plutot un graphique que j'essaie de mettre au milieu
Voila comment j'ai modifié mon prog....
Tout s'affiche sauf le graphique avec le rond et le trait ...

Classe principale Border2.java
import java.awt.*;
public class Border2 extends java.applet.Applet implements Runnable{
BorderLayout Bord= new BorderLayout();
Dessin mon_affichage=new Dessin();

Button N1=new Button("N1");
Button S1=new Button("S1");
Button E1=new Button("E1");
Button O1=new Button("O1");


public void init(){
setLayout(Bord);
add("North", N1);
add("South", S1);
add("East", E1);
add("West", O1);
add("Center", mon_affichage);
}
public Border2() {
Thread tr = new Thread(this);
tr.start();
}
public void run(){
while (true) {
mon_affichage.repaint();
}
}
}

Classe Dessin qui se limite a dessine un rond et un trait
import java.awt.*;
public class Dessin extends Canvas{
Image imgTmp;
Graphics gTmp;
public void init(){
imgTmp = createImage(200, 200);
gTmp = imgTmp.getGraphics();
setBackground(Color.black);
}
public void paint(Graphics g){
gTmp.setPaintMode();
gTmp.setColor(Color.white);
gTmp.fillOval(1,1,100,100);
gTmp.setColor(Color.red);
gTmp.drawLine(1,1,1000,1000);
g.drawImage(imgTmp,0,0,this);
}
}
Messages postés
490
Date d'inscription
vendredi 30 janvier 2004
Statut
Membre
Dernière intervention
13 mai 2009
2
ecoute le constructeur d'une classe est une methode qui a pas de retour et quia le nom de la classe alors tu remplace "public void init()" dans la classe Dessin par "public Dessin()" c'est pas comme une applet
Messages postés
152
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
8 octobre 2008

Effectivement, DSL d'etre aussi mauvais, mais il y a "quelques" notions qui m'echappent ;)
J'ai corrigé le tire mais ca râle encore beaucoup... en premier lieu sur le " gTmp = imgTmp.getGraphics(); " de mon constructeur.

import java.awt.*;
public class Dessin extends Panel{
Image imgTmp;
Graphics gTmp;
public Dessin(){
imgTmp = createImage(200, 200);
gTmp = imgTmp.getGraphics();
setBackground(Color.black);
}
public void paint(Graphics g){
gTmp.setPaintMode();
gTmp.setColor(Color.white);
gTmp.fillOval(1,1,100,100);
gTmp.setColor(Color.red);
gTmp.drawLine(1,1,1000,1000);
g.drawImage(imgTmp,0,0,this);
}
}

java.lang.NullPointerException
at Dessin.(Dessin.java:7)
at Border2.(Border2.java:4)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at sun.applet.AppletPanel.createApplet(Unknown Source)
at sun.applet.AppletPanel.runLoader(Unknown Source)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Messages postés
490
Date d'inscription
vendredi 30 janvier 2004
Statut
Membre
Dernière intervention
13 mai 2009
2
tu essai de faire dans paint() la recuperation du graphics avant de commancer le dessin