OVH Cloud OVH Cloud

[Debutant] Dessiner dans un JScrollPane

2 réponses
Avatar
FM
Quelle est la solution la plus simple pour dessiner dans un JScrollPane
(construction d'une image avec des carrés) ?
Voilà ce que j'ai fait (un bouton dans ma fenêtre qui lance le dessin dans
mon scrollPaneDroite) ki ne marche pas.
La methode paint() de ma CImageQuadTree n'est jamais appelée malgré le
repaint() dans son constructeur.

public class CQuadTree extends JFrame

{

boutonAfficherQuad.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent ae) {

scrollPaneDroite.getGraphics().clearRect(1, 1,
scrollPaneDroite.getSize().width-1, scrollPaneDroite.getSize().height-1);

scrollPaneDroite.add(new CImageQuadTree(noeudRacine,
profondeurAffichage));

System.out.println("imageQuadTree ajoutée !");

}

});

}



public class CImageQuadTree extends JComponent {

private Graphics2D g2D;

private CNoeud noeudRacine;

private int profondeurAffichage;


public CImageQuadTree(CNoeud noeud, int profondeur){

noeudRacine = noeud;

profondeurAffichage = profondeur;

System.out.println("affichage");

repaint();

}


public void paint(Graphics g) {

g2D = (Graphics2D) g;

System.out.println("affiché");

afficherQuadTree(noeudRacine);

}


private void afficherQuadTree(CNoeud noeud) {

if (noeud.getEstUneTerminaison() || (noeud.getNiveau() ==
profondeurAffichage)) {

// afficher le noeud

CPixel pixel = noeud.getCouleurMoyenne();

g2D.setPaint(new
Color(pixel.getValeurRouge(),pixel.getValeurVert(),pixel.getValeurBleu()));

g2D.fill(new
Rectangle(noeud.getXNoeud()+1,noeud.getYNoeud()+1,noeud.getTailleNoeud(),noe
ud.getTailleNoeud()));

}

else {

afficherQuadTree(noeud.getNoeudNordOuest());

afficherQuadTree(noeud.getNoeudNordEst());

afficherQuadTree(noeud.getNoeudSudOuest());

afficherQuadTree(noeud.getNoeudSudEst());

}

}


}

PS : Quelqu'un peut-il me conseiller un lecteru de news autres que celui
d'OE.

2 réponses

Avatar
FM
Personne pour me filer un petit coup de main. Je souhaite juste savoir
comment dessiner dans un JSCrollPane
(je dois reconstituer une image en remplissant des carrés de différentes
taille et couleur).

"FM" a écrit dans le message de
news:UTSfb.4036$
Quelle est la solution la plus simple pour dessiner dans un JScrollPane
(construction d'une image avec des carrés) ?
Voilà ce que j'ai fait (un bouton dans ma fenêtre qui lance le dessin dans
mon scrollPaneDroite) ki ne marche pas.
La methode paint() de ma CImageQuadTree n'est jamais appelée malgré le
repaint() dans son constructeur.

public class CQuadTree extends JFrame

{

boutonAfficherQuad.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent ae) {

scrollPaneDroite.getGraphics().clearRect(1, 1,
scrollPaneDroite.getSize().width-1, scrollPaneDroite.getSize().height-1);

scrollPaneDroite.add(new CImageQuadTree(noeudRacine,
profondeurAffichage));

System.out.println("imageQuadTree ajoutée !");

}

});

}



public class CImageQuadTree extends JComponent {

private Graphics2D g2D;

private CNoeud noeudRacine;

private int profondeurAffichage;


public CImageQuadTree(CNoeud noeud, int profondeur){

noeudRacine = noeud;

profondeurAffichage = profondeur;

System.out.println("affichage");

repaint();

}


public void paint(Graphics g) {

g2D = (Graphics2D) g;

System.out.println("affiché");

afficherQuadTree(noeudRacine);

}


private void afficherQuadTree(CNoeud noeud) {

if (noeud.getEstUneTerminaison() || (noeud.getNiveau() = > profondeurAffichage)) {

// afficher le noeud

CPixel pixel = noeud.getCouleurMoyenne();

g2D.setPaint(new

Color(pixel.getValeurRouge(),pixel.getValeurVert(),pixel.getValeurBleu()));


g2D.fill(new

Rectangle(noeud.getXNoeud()+1,noeud.getYNoeud()+1,noeud.getTailleNoeud(),noe

ud.getTailleNoeud()));

}

else {

afficherQuadTree(noeud.getNoeudNordOuest());

afficherQuadTree(noeud.getNoeudNordEst());

afficherQuadTree(noeud.getNoeudSudOuest());

afficherQuadTree(noeud.getNoeudSudEst());

}

}


}

PS : Quelqu'un peut-il me conseiller un lecteru de news autres que celui
d'OE.




Avatar
Ced
J'ai envoyé une réponse à ton message, mais je ne la vois nulle part (même
pas dans ma boîte d'envoi). Je recommence.

Ce que je ferais à ta place - mais c'est peut être pas la meilleure
solution -, c'est de glisser un JPanel dans le JScrollPane. dans ce JPanel,
je surchargerai:
- la méthode getPreferedSize() pour qu'elle renvoie la dimension de mon
image,
- la méthode paint() pour y dessiner mon image.

Et pour gagner en légèreté, je créerai un object BufferedImage dans lequel
je construirai mon image une fois pour toute, puis je peindrai cette image
dans le paint() du JPanel.

qu'en dis-tu?

Ced.

"FM" a écrit dans le message de
news:UTSfb.4036$
Quelle est la solution la plus simple pour dessiner dans un JScrollPane
(construction d'une image avec des carrés) ?
Voilà ce que j'ai fait (un bouton dans ma fenêtre qui lance le dessin dans
mon scrollPaneDroite) ki ne marche pas.
La methode paint() de ma CImageQuadTree n'est jamais appelée malgré le
repaint() dans son constructeur.

public class CQuadTree extends JFrame

{

boutonAfficherQuad.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent ae) {

scrollPaneDroite.getGraphics().clearRect(1, 1,
scrollPaneDroite.getSize().width-1, scrollPaneDroite.getSize().height-1);

scrollPaneDroite.add(new CImageQuadTree(noeudRacine,
profondeurAffichage));

System.out.println("imageQuadTree ajoutée !");

}

});

}



public class CImageQuadTree extends JComponent {

private Graphics2D g2D;

private CNoeud noeudRacine;

private int profondeurAffichage;


public CImageQuadTree(CNoeud noeud, int profondeur){

noeudRacine = noeud;

profondeurAffichage = profondeur;

System.out.println("affichage");

repaint();

}


public void paint(Graphics g) {

g2D = (Graphics2D) g;

System.out.println("affiché");

afficherQuadTree(noeudRacine);

}


private void afficherQuadTree(CNoeud noeud) {

if (noeud.getEstUneTerminaison() || (noeud.getNiveau() = > profondeurAffichage)) {

// afficher le noeud

CPixel pixel = noeud.getCouleurMoyenne();

g2D.setPaint(new

Color(pixel.getValeurRouge(),pixel.getValeurVert(),pixel.getValeurBleu()));


g2D.fill(new

Rectangle(noeud.getXNoeud()+1,noeud.getYNoeud()+1,noeud.getTailleNoeud(),noe

ud.getTailleNoeud()));

}

else {

afficherQuadTree(noeud.getNoeudNordOuest());

afficherQuadTree(noeud.getNoeudNordEst());

afficherQuadTree(noeud.getNoeudSudOuest());

afficherQuadTree(noeud.getNoeudSudEst());

}

}


}

PS : Quelqu'un peut-il me conseiller un lecteru de news autres que celui
d'OE.