OVH Cloud OVH Cloud

[SWT] comportement etrange du GridLayout

2 réponses
Avatar
Julie
Bonjour,

J'essaie de disposer deux objets Text et Button sur la meme ligne a l'aide
du GridLayout de l'API SWT de maniere a ce que l'objet Text occupe toute la
place disponible et l'objet Button le strict necessaire.
Lorsqu'il n'y a qu'une seule ligne tout est correct.
Par contre, lorsque l'on ajoute un objet (ici un Text MULTI) en dessous sur
deux colonnes (gridData.horizontalSpan = 2), le premier objet n'occupe plus
que la moitier de la longeur totale.
Les colonnes ont la meme largeur alors que "makeColumnsEqualWidth" du
GridLayout est initialise a "false" !!!
Aurai-je oublie quelques choses ou bien le GridLayout a-t-il un bug ?
Une solution pour remedier a ce probleme ?

voici le code :

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;


public class HelloWorld {

public static void main (String[] args) {

Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(2, false));

Text text1 = new Text(shell, SWT.SINGLE | SWT.BORDER);
text1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

Button bouton = new Button(shell, SWT.PUSH);
bouton.setText("bouton");

Text text2 = new Text(shell, SWT.MULTI | SWT.BORDER);
GridData gridData = new GridData(GridData.FILL_BOTH);
gridData.horizontalSpan = 2;
text2.setLayoutData(gridData);

shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();

}

}

2 réponses

Avatar
CABA
Salut,

Je n'ai pas encore l'explication du pourquoi ça ne marche pas mais ça marche
comme ça :


public static void main (String[] args) {
Display display = new Display();

Shell shell = new Shell(display);


GridLayout gl = new GridLayout();

gl.numColumns = 2;

shell.setLayout(gl);



Text text1 = new Text(shell, SWT.SINGLE | SWT.BORDER);

GridData dataText1 = new GridData(GridData.FILL_HORIZONTAL);

text1.setLayoutData(dataText1);



Button bouton = new Button(shell, SWT.PUSH);

bouton.setText("bouton");

bouton.setLayoutData(new GridData());



Text text2 = new Text(shell, SWT.MULTI | SWT.BORDER);

GridData gridData = new GridData();

gridData.horizontalSpan = 2;

gridData.horizontalAlignment = GridData.FILL;

gridData.verticalAlignment = GridData.FILL;

gridData.grabExcessVerticalSpace = true;

text2.setLayoutData(gridData);



shell.open();

while (!shell.isDisposed()) {

if (!display.readAndDispatch())

display.sleep();

}

display.dispose();

}


Voilà.

J'espère que ça t'aide quand même.

A+
CABA


"Julie" a écrit dans le message de news:
3fc4c3b4$0$9295$
Bonjour,

J'essaie de disposer deux objets Text et Button sur la meme ligne a l'aide
du GridLayout de l'API SWT de maniere a ce que l'objet Text occupe toute
la

place disponible et l'objet Button le strict necessaire.
Lorsqu'il n'y a qu'une seule ligne tout est correct.
Par contre, lorsque l'on ajoute un objet (ici un Text MULTI) en dessous
sur

deux colonnes (gridData.horizontalSpan = 2), le premier objet n'occupe
plus

que la moitier de la longeur totale.
Les colonnes ont la meme largeur alors que "makeColumnsEqualWidth" du
GridLayout est initialise a "false" !!!
Aurai-je oublie quelques choses ou bien le GridLayout a-t-il un bug ?
Une solution pour remedier a ce probleme ?

voici le code :

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;


public class HelloWorld {

public static void main (String[] args) {

Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(2, false));

Text text1 = new Text(shell, SWT.SINGLE | SWT.BORDER);
text1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

Button bouton = new Button(shell, SWT.PUSH);
bouton.setText("bouton");

Text text2 = new Text(shell, SWT.MULTI | SWT.BORDER);
GridData gridData = new GridData(GridData.FILL_BOTH);
gridData.horizontalSpan = 2;
text2.setLayoutData(gridData);

shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();

}

}




Avatar
Julie
Etrange ! Ce GridLayout a parfois un fonctionnement bizarre.
Merci CABA.

"CABA" a écrit dans le message news:
bq2k97$3q3$
Salut,

Je n'ai pas encore l'explication du pourquoi ça ne marche pas mais ça
marche

comme ça :


public static void main (String[] args) {
Display display = new Display();

Shell shell = new Shell(display);


GridLayout gl = new GridLayout();

gl.numColumns = 2;

shell.setLayout(gl);



Text text1 = new Text(shell, SWT.SINGLE | SWT.BORDER);

GridData dataText1 = new GridData(GridData.FILL_HORIZONTAL);

text1.setLayoutData(dataText1);



Button bouton = new Button(shell, SWT.PUSH);

bouton.setText("bouton");

bouton.setLayoutData(new GridData());



Text text2 = new Text(shell, SWT.MULTI | SWT.BORDER);

GridData gridData = new GridData();

gridData.horizontalSpan = 2;

gridData.horizontalAlignment = GridData.FILL;

gridData.verticalAlignment = GridData.FILL;

gridData.grabExcessVerticalSpace = true;

text2.setLayoutData(gridData);



shell.open();

while (!shell.isDisposed()) {

if (!display.readAndDispatch())

display.sleep();

}

display.dispose();

}


Voilà.

J'espère que ça t'aide quand même.

A+
CABA


"Julie" a écrit dans le message de news:
3fc4c3b4$0$9295$
Bonjour,

J'essaie de disposer deux objets Text et Button sur la meme ligne a
l'aide


du GridLayout de l'API SWT de maniere a ce que l'objet Text occupe toute
la

place disponible et l'objet Button le strict necessaire.
Lorsqu'il n'y a qu'une seule ligne tout est correct.
Par contre, lorsque l'on ajoute un objet (ici un Text MULTI) en dessous
sur

deux colonnes (gridData.horizontalSpan = 2), le premier objet n'occupe
plus

que la moitier de la longeur totale.
Les colonnes ont la meme largeur alors que "makeColumnsEqualWidth" du
GridLayout est initialise a "false" !!!
Aurai-je oublie quelques choses ou bien le GridLayout a-t-il un bug ?
Une solution pour remedier a ce probleme ?

voici le code :

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;


public class HelloWorld {

public static void main (String[] args) {

Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(2, false));

Text text1 = new Text(shell, SWT.SINGLE | SWT.BORDER);
text1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

Button bouton = new Button(shell, SWT.PUSH);
bouton.setText("bouton");

Text text2 = new Text(shell, SWT.MULTI | SWT.BORDER);
GridData gridData = new GridData(GridData.FILL_BOTH);
gridData.horizontalSpan = 2;
text2.setLayoutData(gridData);

shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();

}

}