2 BorderLayout + 1 image... ca fait trop pour moi :(

Résolu
omcougar Messages postés 152 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 8 octobre 2008 - 29 juin 2005 à 12:35
safisoft Messages postés 489 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 13 mai 2009 - 29 juin 2005 à 15:05
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

omcougar Messages postés 152 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 8 octobre 2008 1
29 juin 2005 à 15:03
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.
indiana_jules Messages postés 750 Date d'inscription mardi 9 mars 2004 Statut Membre Dernière intervention 23 décembre 2008 22
29 juin 2005 à 14:02
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
safisoft Messages postés 489 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 13 mai 2009 6
29 juin 2005 à 14:05
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");
safisoft Messages postés 489 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 13 mai 2009 6
29 juin 2005 à 14:08
dsl GT en retard!
mais pour l'insertion tu pe utiliser add("Center",<Component>) oubien add(<Component>, BorderLayout.CENTER) c'est kif kif.

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
omcougar Messages postés 152 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 8 octobre 2008 1
29 juin 2005 à 14:27
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);
}
}
safisoft Messages postés 489 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 13 mai 2009 6
29 juin 2005 à 14:38
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
omcougar Messages postés 152 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 8 octobre 2008 1
29 juin 2005 à 14:48
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)
safisoft Messages postés 489 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 13 mai 2009 6
29 juin 2005 à 15:05
tu essai de faire dans paint() la recuperation du graphics avant de commancer le dessin
Rejoignez-nous