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

SWT/JFace Java Discussion :

Taille d'un canvas


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 584
    Par défaut Taille d'un canvas
    Bonjour,

    Je suis en train de réaliser un agenda. J'ai une cellule (composite) contenant une ou plusieurs tâches (Canvas).

    Ma Tâche (Canvas) ne prend pas la totalité de la taille de la cellule (composite)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
     
    public class PlanningTask extends Canvas{
     
    	private static final int TASK_HEIGHT = 20;
    	private static final int TASK_TEXT_FONT_HEIGHT = 10;
     
    	public PlanningTask(final Composite parent, int style) {
    		super(parent, style);
    		addCanvasListener();
    		System.out.println("width parent " + parent.getSize().x);
    		this.setSize(parent.getSize().x, parent.getSize().y);
    	}
     
     
    	/**
             * Ajoute un listener 
             * 
             */
    	private void addCanvasListener() {
    		// ajoute un listener qui écoute les modifications sur le planning
    		this.addPaintListener(new PaintListener() {
    			public void paintControl(final PaintEvent event) {
    				PlanningTask.this.paint(event.gc);
    			}
    		});
    	}
     
    	/* Paint function */
    	private void paint(GC gc) {
    		System.out.println("width image in paint méthode " + getSize().x);
            Image image = (Image) getData("double-buffer-image");
            if (image == null || image.getBounds().width != getSize().x || image.getBounds().height != getSize().y) {	
            	image = new Image(getDisplay(),getSize().x,getSize().y);
            	setData("double-buffer-image", image);
            }
            GC imageGC = new GC(image);       
    		imageGC.setAntialias(SWT.ON);
    		paintTask(imageGC);
    		gc.drawImage(image, 0, 0);
    		imageGC.dispose();
    		gc.dispose();
    	}
     
    	/**
             * <p>
             * Paint the planning.
             * </p>
             * 
             */
    	private void paintTask(GC gc) {		
     
    	      Color color = this.getDisplay().getSystemColor(
    					SWT.COLOR_YELLOW);
    	      gc.setForeground(this.getDisplay().getSystemColor(
    					SWT.COLOR_BLACK));
    	      gc.setBackground(color);
    	      Font font = new Font(this.getDisplay(), "Arial",TASK_TEXT_FONT_HEIGHT,SWT.BOLD);
     
    	      int x = this.getBounds().x;
    	      int y = this.getBounds().y;
    	      int width = this.getSize().x;
    	      System.out.println("width "+width);
    	      int height = TASK_HEIGHT;
     
    	      gc.drawRoundRectangle( x,y,width,height,10,10);
    	      gc.fillRoundRectangle(x+1,y+1,width-1, height-1,9,9);
    	      gc.setFont(font);
    	      Point textSize = gc.textExtent("task");
    	      int xText = (int) ((x + width/ 2) - (textSize.x / 2));
    	      int yText = (int) ((y + 25 / 2) - (textSize.y / 2));
    	      gc.drawText("task", xText, yText);
     
    	      gc.dispose();
    	}
     
    }
    J'ai mis des sortie ver la console dans le constructeur et la méthode paint. Je ne comprend pas pourquoi la méthode getSize() retourne deux valeurs différentes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    width parent 250
    width image in paint méthode 64
    width 64
    Cordialement

  2. #2
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut
    Salut,

    Je te conseillerai plutôt de mettre la taille que tu souhaites obtenir sur la donnée de layout de ton composant plutôt que sur le composant lui-même. C'est cette donnée qui prendra le pas sur les informations de tailles.
    Donc, si tu as un GridData, tu fais un petit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gridData.widthHint = parent.getSize().x;
    gridData.heightHint = parent.getSize().y;
    Voilà, à+
    Gueritarish

  3. #3
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 584
    Par défaut
    Salut Gueritarish,

    Malgré le griData, j'ai toujours ce dysfonctionnement.
    Mon composant ne prend pas toutes la place de son conteneur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	public PlanningTask(final Composite parent, int style) {
    		super(parent, style);
    		addCanvasListener();
    		System.out.println("width parent " + parent.getSize().x);
    		GridData gridData = new GridData();
            gridData.horizontalAlignment = GridData.FILL;
            gridData.grabExcessHorizontalSpace = true;
            gridData.widthHint = parent.getSize().x;
            gridData.heightHint = parent.getSize().y;
            this.setLayoutData(gridData);
    	}
    @+

  4. #4
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut
    Salut,

    Si tu veux qu'il occupe toute la place du composant, as-tu pensé à créer un gridData qui s'agrandit : new GridData(SWT.FILL, SWT.FILL, true, true);? J'imagine que oui, mais bon, ça vaut toujours le coup de demander

    Voilà, à+
    Gueritarish

  5. #5
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 584
    Par défaut
    Salut Gueritarish,

    J'y est pensé sauf que cela ne change bizarrement rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	public PlanningTask(final Composite parent, int style) {
    		super(parent, style);
    		addCanvasListener();
    		System.out.println("width parent " + parent.getSize().x);
    		this.setSize(parent.getSize().x, parent.getSize().y);
    		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
            gridData.horizontalAlignment = GridData.FILL;
            gridData.grabExcessHorizontalSpace = true;
            gridData.widthHint = parent.getSize().x;
            gridData.heightHint = parent.getSize().y;
            this.setLayoutData(gridData);
    	}
    Cordialement

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur en apprentissage
    Inscrit en
    Août 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur en apprentissage
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2012
    Messages : 12
    Par défaut
    Bonjour,

    Un ptit conseil, quand j'ai un problème d'IHM je fais appel à WindowBuilder pro qui est un plug-in Eclipse qui génère le code de l'IHM que tu construis en drag'n drop. C'est très pratique pour voir ce que tu fais de mal.
    Voici le lien pour la liste des download sites :
    http://www.eclipse.org/windowbuilder/download.php

    PS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
    veut dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    gridData.horizontalAlignment = SWT.FILL;
    gridData.grabExcessHorizontalSpace = true;
    gridData.verticalAlignment = SWT.FILL;
    gridData.grabExcessVericalSpace = true;
    donc inutile de mettre les 2 lignes après l'instanciation de ton GridData

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redimensionner image à la taille d'un canvas
    Par Thibault92 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/02/2012, 12h53
  2. Réponses: 2
    Dernier message: 09/02/2010, 18h59
  3. Taille d'un canvas a 100% en AS3
    Par TheDrev dans le forum Flex
    Réponses: 4
    Dernier message: 28/05/2009, 10h10
  4. Définir la taille d'un canvas dans un sizer
    Par Knuckles dans le forum wxPython
    Réponses: 1
    Dernier message: 13/06/2007, 12h27
  5. Adapter un texte à la taille d'un Canvas
    Par alex6891 dans le forum Java ME
    Réponses: 8
    Dernier message: 16/03/2007, 09h21

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