IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

probleme de Conteneur


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 50
    Par défaut probleme de Conteneur
    Bonjour a tous,
    j'ai un probleme de Conteneur pour une interface graphique. Je chercher depuis des jours, mais sans resultat ... J'ai vraiment besoin de conseils ...
    J'aimerais developpe une interface me permettant d'afficher PLUSIEURS images, afin que je puisse les redimensioner, les deplacer ...Pour se faire, j'ai developpe deux classes :
    1. Classe java permettant d'effectuer ces operation (modification de la taille, ...). Sa declaration est la suivante :

    public class ImageDepl extends JComponent implements MouseMotionListener, MouseListener{

    public Image image;
    ...
    public void deplacer()
    ...
    }
    2. Classe java qui instancie la classe ImageDepl autant de fois que je veux manipuler des images.
    Mon probleme intervient dans cette classe : j'arrive a afficher plusieurs images, les deplacer, les redimensionner, ... mais seulement, il y a un gros probleme avec les conteneur : si par exemple, je declare un GridLayout, alors mes images seront dans des sortes de cadres invisibles, si je declare un BorderLayout, idem, etc.
    En gros, il m'est impossible d'afficher deux images dans un meme espace (impossible de les superposer par exemple), car c'est comme si chaque image avait son propre espace. (et si je deplace une image A dans lespace dune image B, il devient invisible)
    Que faire ????????? C'est a cause de mon conteneur, du fait que j'etends la classe JComponent ??????

    Merci de m'aider, j'en ai reellement besoin !
    Au cas ou, j'ai copie le code de mes deux classes .........

    **************CLASSE PRINCIPALE*************************
    import javax.swing.*;
    import java.awt.*;
    public class disposition extends JPanel
    {

    public disposition()
    {
    setLayout(new GridLayout(1, 1));
    ImageDepl im1 = new ImageDepl("c:\\00000021.gif");
    ImageDepl im2 = new ImageDepl("c:\\00000022.gif");

    this.add(im1);
    this.add(im2);
    setPreferredSize(new Dimension(450, 630));
    }


    public static void main(String[] args)
    {
    JFrame frame = new JFrame("bitre");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    disposition demo = new disposition();
    demo.setOpaque(true); //content panes must be opaque
    frame.setContentPane(demo);
    frame.pack();
    frame.setVisible(true);
    }
    }

    **************CLASSE DE DESSIN*************************

    import java.awt.Cursor;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Rectangle;
    import java.awt.Toolkit;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import javax.swing.JComponent;

    public class ImageDepl extends JComponent implements MouseMotionListener, MouseListener{
    public Image image;
    public Rectangle selection;
    public int H;
    public int L;

    public ImageDepl(String str){

    addMouseListener(this);

    addMouseMotionListener(this);
    this.image = Toolkit.getDefaultToolkit().getImage(str);
    setSelectionBounds(new Rectangle(0, 0, 300, 400));

    }

    int donneLargeur(){
    return L;
    }

    Image donneImage(){
    return image;
    }

    int donneHauteur(){
    return H;
    }

    public void paintComponent(Graphics graphics) {
    Graphics g = graphics.create();
    g.drawImage(this.image, this.selection.x, this.selection.y, this.selection.width, this.selection.height, this);
    H=image.getHeight(this);
    L=image.getWidth(this);
    g.dispose();
    }

    public void setSelectionBounds(Rectangle rect)
    {
    this.selection=rect;
    this.repaint();
    }


    protected int frameWidth=5;
    protected int minSize=5;
    protected int startDragX, startDragY;
    protected Rectangle startDragRect;
    protected boolean resizeLeft, resizeTop, resizeRight, resizeBottom, move;



    public void mousePressed(MouseEvent e)
    {
    System.out.println(selection);
    if (selection!=null)
    {
    int x=e.getX();
    int y=e.getY();

    int selX=selection.x;
    int selY=selection.y;
    int selW=selection.width;
    int selH=selection.height;

    Rectangle inside=new Rectangle(selX, selY, selW, selH);

    Rectangle leftFrame=new Rectangle(selX, selY, frameWidth, selH);
    Rectangle topFrame=new Rectangle(selX, selY, selW, frameWidth);
    Rectangle rightFrame=new Rectangle(selX+selW-frameWidth, selY, frameWidth, selH);
    Rectangle bottomFrame=new Rectangle(selX, selY+selH-frameWidth, selW, frameWidth);

    boolean isInside=inside.contains(x, y);
    boolean isLeft=leftFrame.contains(x, y);
    boolean isTop=topFrame.contains(x, y);
    boolean isRight=rightFrame.contains(x, y);
    boolean isBottom=bottomFrame.contains(x, y);


    if (isLeft && isTop)
    {
    resizeLeft=true;
    resizeTop=true;
    resizeRight=false;
    resizeBottom=false;
    move=false;
    }
    else if (isTop && isRight)
    {
    resizeLeft=false;
    resizeTop=true;
    resizeRight=true;
    resizeBottom=false;
    move=false;
    }
    else if (isRight && isBottom)
    {
    resizeLeft=false;
    resizeTop=false;
    resizeRight=true;
    resizeBottom=true;
    move=false;
    }
    else if (isBottom && isLeft)
    {
    resizeLeft=true;
    resizeTop=false;
    resizeRight=false;
    resizeBottom=true;
    move=false;
    }
    else if (isLeft)
    {
    resizeLeft=true;
    resizeTop=false;
    resizeRight=false;
    resizeBottom=false;
    move=false;
    }
    else if (isTop)
    {
    resizeLeft=false;
    resizeTop=true;
    resizeRight=false;
    resizeBottom=false;
    move=false;
    }
    else if (isRight)
    {
    resizeLeft=false;
    resizeTop=false;
    resizeRight=true;
    resizeBottom=false;
    move=false;
    }
    else if (isBottom)
    {
    resizeLeft=false;
    resizeTop=false;
    resizeRight=false;
    resizeBottom=true;
    move=false;
    }
    else if (isInside)
    {
    resizeLeft=false;
    resizeTop=false;
    resizeRight=false;
    resizeBottom=false;
    move=true;
    }
    else
    {
    resizeLeft=false;
    resizeTop=false;
    resizeRight=false;
    resizeBottom=false;
    move=false;
    }

    this.startDragX=x;
    this.startDragY=y;
    this.startDragRect=(Rectangle) selection.clone();
    }
    }

    /* (non-Javadoc)
    * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
    */
    public void mouseClicked(MouseEvent arg0) {
    // TODO Auto-generated method stub

    }
    /* (non-Javadoc)
    * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
    */
    public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub

    }
    /* (non-Javadoc)
    * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
    */
    public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub

    }
    /* (non-Javadoc)
    * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
    */
    public void mouseReleased(MouseEvent arg0) {
    // TODO Auto-generated method stub

    }
    /* (non-Javadoc)
    * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
    */
    public void mouseDragged(MouseEvent e)
    {
    System.out.println("deds");
    if (startDragRect!=null)
    {
    int x=e.getX();
    int y=e.getY();

    int diffX=startDragX-x;
    int diffY=startDragY-y;

    int newX=startDragRect.x;
    int newY=startDragRect.y;
    int newW=startDragRect.width;
    int newH=startDragRect.height;

    if (resizeLeft)
    {
    newX=newX-diffX;
    newW=newW+diffX;
    }
    if (resizeTop)
    {
    newY=newY-diffY;
    newH=newH+diffY;
    }
    if (resizeRight)
    {
    newW=newW-diffX;
    }
    if (resizeBottom)
    {
    newH=newH-diffY;
    }
    if (move)
    {
    newX=newX-diffX;
    newY=newY-diffY;
    }
    if (newW>minSize && newH>minSize)
    {
    setSelectionBounds(new Rectangle(newX, newY, newW, newH));
    }
    }
    }
    /* (non-Javadoc)
    * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
    */
    public void mouseMoved(MouseEvent e)
    {
    System.out.println("la");
    if (selection!=null)
    {
    int x=e.getX();
    int y=e.getY();

    int selX=selection.x;
    int selY=selection.y;
    int selW=selection.width;
    int selH=selection.height;

    Rectangle inside=new Rectangle(selX, selY, selW, selH);

    Rectangle leftFrame=new Rectangle(selX, selY, frameWidth, selH);
    Rectangle topFrame=new Rectangle(selX, selY, selW, frameWidth);
    Rectangle rightFrame=new Rectangle(selX+selW-frameWidth, selY, frameWidth, selH);
    Rectangle bottomFrame=new Rectangle(selX, selY+selH-frameWidth, selW, frameWidth);

    boolean isInside=inside.contains(x, y);
    boolean isLeft=leftFrame.contains(x, y);
    boolean isTop=topFrame.contains(x, y);
    boolean isRight=rightFrame.contains(x, y);
    boolean isBottom=bottomFrame.contains(x, y);

    if (isLeft && isTop)
    {
    setCursor(Cursor.getPredefinedCursor(Cursor.NW_RESIZE_CURSOR));
    }
    else if (isTop && isRight)
    {
    setCursor(Cursor.getPredefinedCursor(Cursor.NE_RESIZE_CURSOR));
    }
    else if (isRight && isBottom)
    {
    setCursor(Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR));
    }
    else if (isBottom && isLeft)
    {
    setCursor(Cursor.getPredefinedCursor(Cursor.SW_RESIZE_CURSOR));
    }
    else if (isLeft)
    {
    setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
    }
    else if (isTop)
    {
    setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
    }
    else if (isRight)
    {
    setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
    }
    else if (isBottom)
    {
    setCursor(Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR));
    }
    else if (isInside)
    {
    setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
    }
    else
    {
    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    }
    }
    else
    {
    setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    }
    }

    }
    Merci

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,
    je parie que JDesktopPane et JInternalFrames vont t'aller à ravir.

    Un petit tutoriel illustré.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 50
    Par défaut
    Mais moi je voudrai continuer à utiliser mes ImageDepl, je veux que ca reste des images qu'on peut déplacer et modifier pas des petites fenêtres. Ou alors est ce que je peux créer des JInternalFrame avec dedans uniquement une image qui se resize en même temps que ma JinternalFrame et sans la petite bordure en haut (avec close maximize et minimize).

    C'est possible??

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Dans ton cas la solution la plus évidente est d'abandonner ton composant ImageDepl et de directement dessiner tes images sur un JPanel, comme cela elles pourront se recouvrir les unes les autres.

    Le ce que tu devras faire:
    Coder une classe contenant une BufferedImage, l'emplacement où elle doit se trouver, les getters, setters et constructeurs qui von bien, ainsi qu'un méthode contains permettant de savoir si un point fait partie de ton image ou pas.

    Puis tu crées une collection de ces classes et un JPanel dont la méthode paintComponent sera redéfinie pour afficher tes images (tu parcourres ta collection et tu dessine chaque image à l'endroit uindiqué sur sur les graphics ou les graphics2d du JPanel).
    Tu ajoutes un MouseListener sur ton panel et tu fais joujou avec la méthode contains des éléments de ta collection pour savoir si une forme est sélectionnée

    Bon bien sur faut implémenter tout ça un peu plus proprement que ce que je t'ais raconté (séparation modele/vue et tout le toutim) mais l'idée y est.

    Ca te va?

  5. #5
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Il y a aussi l'aspect layers à gérer (quelle image par dessus quelle autre) et j'encourage donc l'usage d'un JLayeredPane.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Ou d'une variable dans ta classe contenant l'image gérant la profondeur et de trier ta collection selon la profondeur de ton image

Discussions similaires

  1. probleme de conteneurs!
    Par kucai dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 15/09/2010, 10h38
  2. MovieClip et conteneur : probleme de visibilité
    Par Clorish dans le forum Flash
    Réponses: 2
    Dernier message: 03/07/2007, 16h24
  3. [debutant] probleme de choix de conteneur
    Par Faiche dans le forum Langage
    Réponses: 3
    Dernier message: 23/12/2006, 18h13
  4. Réponses: 2
    Dernier message: 24/05/2006, 15h45
  5. [CSS] probleme avec un div conteneur
    Par localhost dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 26/01/2006, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo