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 :

Table élastique à 2 cellules


Sujet :

SWT/JFace Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Table élastique à 2 cellules
    Bonjour,

    Novice en Java/SWT je souhaite présenter une image et une ligne de texte comme titre une I/F. Pour cela j'ai défini une table à 2 cellules dans un composite. La cellule 0 contiendra l'image (ai mis letexte "Blablabla1" dans l'exemple ci-dessous) et la cellule1 le texte, cadré à droite. Je souhaite que ce dernier texte soit toujours cadré à droite si je redimensionne la fenêtre. Le code ci-après (implémentation simplifiée) implémente exactement cela sous Linux (Red Hat 5 et Ubuntu 12.10). Par contre sous Windows 7, une cellule "virtuelle" est créée à droite de la cellule 1 pour remplir l'alignement horizontal. Le texte de la cellule 1 n'est donc jamais cadré à droite !!! Quelqu'un peut-il me donner une explication ? (bug dans mon code même si fonctionnel sour Linux ? problème de compatibilité Linux / Windows ?). Merci par avance.

    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
     
    //------------------------------------------------------------------------------
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.layout.GridData;
    import org.eclipse.swt.layout.GridLayout;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Table;
    import org.eclipse.swt.widgets.TableColumn;
    import org.eclipse.swt.widgets.TableItem;
    //------------------------------------------------------------------------------
    public class TEST {
    	private static Display display;
    	private static Shell shell;	
     
    	public static void main(String[] args) {
    		display = new Display();
     
    		shell = new Shell(display, SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.RESIZE);
    		shell.setText("TEXT ..... BLABLA");
    		shell.setLayout(new GridLayout());
     
    		final Composite composite1 = new Composite(shell, SWT.FILL);
    		composite1.setLayout(new GridLayout());
    		composite1.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false, 1, 1));
     
    		final Table Title = new Table(composite1, SWT.BORDER);
    		Title.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 0, 0));
    		Title.setHeaderVisible(false);
    		Title.setLinesVisible(false);
     
    		final TableColumn[] TitleCol = new TableColumn[2];
    		TitleCol[0] = new TableColumn(Title, SWT.LEFT);
    		TitleCol[1] = new TableColumn(Title, SWT.RIGHT);		
    		final TableItem l0Title = new TableItem(Title, SWT.NONE);
    		l0Title.setText(0, "Blablabla1");
    		l0Title.setText(1, "Blablablabla2");
    		TitleCol[0].pack();
    		TitleCol[1].pack();
     
    		shell.open();
    		while (!shell.isDisposed()) {
    			if (!display.readAndDispatch()) display.sleep();
    		}
    	}
    }

  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 : 39
    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
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    En fait, le problème c'est que tu fais un pack() sur tes colonnes. Elles vont donc se redimensionner pour être adapté au contenu. Donc, dans ton cas, la seconde colonne est très courte et on ne voit pas que le texte est aligné à droite (mais c'est bien le cas). Pour avoir une meilleure gestion de la taille de tes colonnes, il vaut mieux passer par un TableColumnLayout.
    Ce layout ne peut être ajouté qu'à un Composite dont l'unique enfant est une Table. En voici l'utilisation pour ta table:
    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
    //------------------------------------------------------------------------------
    import org.eclipse.jface.layout.TableColumnLayout;
    import org.eclipse.jface.viewers.ColumnWeightData;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.layout.GridData;
    import org.eclipse.swt.layout.GridLayout;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Table;
    import org.eclipse.swt.widgets.TableColumn;
    import org.eclipse.swt.widgets.TableItem;
     
    //------------------------------------------------------------------------------
    public class TEST {
      private static Display display;
     
      private static Shell shell;
     
      public static void main(final String[] args) {
        display = new Display();
     
        shell = new Shell(display, SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.RESIZE);
        shell.setText("TEXT ..... BLABLA");
        shell.setLayout(new GridLayout());
     
        final Composite composite1 = new Composite(shell, SWT.FILL);
        final TableColumnLayout iTableLayout = new TableColumnLayout();
        composite1.setLayout(iTableLayout);
        composite1.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false,
            1, 1));
     
        final Table Title = new Table(composite1, SWT.BORDER);
        Title.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 0, 0));
        Title.setHeaderVisible(false);
        Title.setLinesVisible(false);
     
        final TableColumn[] TitleCol = new TableColumn[2];
        TitleCol[0] = new TableColumn(Title, SWT.LEFT);
        iTableLayout.setColumnData(TitleCol[0], new ColumnWeightData(1));
        TitleCol[1] = new TableColumn(Title, SWT.RIGHT);
        iTableLayout.setColumnData(TitleCol[1], new ColumnWeightData(10));
        final TableItem l0Title = new TableItem(Title, SWT.NONE);
        l0Title.setText(0, "Blablabla1");
        l0Title.setText(1, "Blablablabla2");
     
        shell.open();
        while (!shell.isDisposed()) {
          if (!display.readAndDispatch())
            display.sleep();
        }
      }
    }
    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci Gueritarish pour ta prompte réponse. Ton explication se tient et m'interpelle sur d'autres problèmes que j'ai eus. Toutefois, je souhaite avoir une application autonome et j'embarque SWT mais pas JFace. Y-a-t'il un equivalent en SWT ? Re-merci par avance.

  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 : 39
    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
    Points : 3 919
    Points
    3 919
    Par défaut
    Alors, si tu ne veux pas utiliser JFace, il va falloir faire le redimensionnement à la main:
    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
    //------------------------------------------------------------------------------
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.layout.GridData;
    import org.eclipse.swt.layout.GridLayout;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Event;
    import org.eclipse.swt.widgets.Listener;
    import org.eclipse.swt.widgets.Shell;
    import org.eclipse.swt.widgets.Table;
    import org.eclipse.swt.widgets.TableColumn;
    import org.eclipse.swt.widgets.TableItem;
     
    //------------------------------------------------------------------------------
    public class TEST {
      private static Display display;
     
      private static Shell shell;
     
      private static int firstColumnSize = 100;
     
      public static void main(final String[] args) {
        display = new Display();
     
        shell = new Shell(display, SWT.CLOSE | SWT.TITLE | SWT.MIN | SWT.RESIZE);
        shell.setText("TEXT ..... BLABLA");
        shell.setLayout(new GridLayout());
     
        final Composite composite1 = new Composite(shell, SWT.FILL);
        composite1.setLayout(new GridLayout());
        composite1.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false,
            1, 1));
     
        final Table Title = new Table(composite1, SWT.BORDER);
        Title.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 0, 0));
        Title.setHeaderVisible(false);
        Title.setLinesVisible(false);
     
        final TableColumn[] TitleCol = new TableColumn[2];
        TitleCol[0] = new TableColumn(Title, SWT.LEFT);
        TitleCol[0].setWidth(firstColumnSize);
        TitleCol[1] = new TableColumn(Title, SWT.RIGHT);
        final TableItem l0Title = new TableItem(Title, SWT.NONE);
     
        Title.addListener(SWT.Resize, new Listener() {
     
          @Override
          public void handleEvent(final Event aEvent) {
            if (aEvent.widget instanceof Table) {
              final Table iTable = (Table) aEvent.widget;
              final TableColumn iColumn = iTable.getColumn(1);
              iColumn.setWidth(iTable.getClientArea().width - firstColumnSize);
            }
          }
        });
        l0Title.setText(0, "Blablabla1");
        l0Title.setText(1, "Blablablabla2");
     
        shell.open();
        while (!shell.isDisposed()) {
          if (!display.readAndDispatch())
            display.sleep();
        }
      }
    }
    Par contre, j'espère qu'il s'agit d'une contrainte professionnelle. Parce que sinon, en te privant de JFace, tu te prives d'une grande aide...

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci Gueritarish pour ta réponse. T'es super. Après recherche sur le Net (e.g. http://eclipsenuggets.blogspot.de/20...elties-in.html), le passage par un listener semblait nécessaire. Merci encore.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/04/2012, 20h18
  2. id parent table d'une cellule
    Par cyrano_de_bergerac dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/08/2010, 15h29
  3. une Table avec des cellules fusionnées
    Par vodasan dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/03/2008, 08h24
  4. Table : rendre une cellule éditable dans un tableau
    Par mollig dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 15/08/2006, 00h09
  5. [table] alignement de cellules
    Par GLDavid dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 04/08/2006, 13h40

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