Question

Je suis en train de travailler sur la façon de faire des widgets SWT (par exemple l'étiquette, Frame) une certaine forme autre que rectangulaire.

Je l'ai fait une fenêtre principale en forme personnalisée en utilisant la méthode setRegion (). Maintenant, je voudrais que les widgets dans la fenêtre de suivre la même forme. Je l'ai essayé d'utiliser la méthode setRegion () sur les widgets eux-mêmes (ils hériteront), mais rien ne se passe.

Comment faire un widget SWT ont une forme personnalisée?

Était-ce utile?

La solution

J'ai réussi à travailler dehors. Il semble ma difficulté a été d'un malentendu découlant de la façon de définir une région personnalisée. Procédé setBounds () définit le système de coordonnées de la zone de mesure. Je supposais que la région et setBounds utilisaient le même système de coordonnées et le résultat ne montrait pas le widget du tout.

L'image affiche l'effet. L'étiquette verte sur les courbes de gauche comme la fenêtre principale, alors que le cadre gris sur le coin inférieur droit ne fonctionne pas.

L'image apparaît dans l'aperçu, mais pas la réponse affiché, essayez:   http://img87.imageshack.us/my.php?image=curvecroppedwf8. PNG

Les fragments de code pour faire ceci:

Display display = Display.getDefault();
Shell shell new Shell(display, SWT.NO_TRIM | SWT.ON_TOP);

// make the region for the main window
// circle is a method that returns a list of points defining a circle
Region region = new Region();
region.add(350, 0, 981, 51);
region.add(circle(380,51,30));
region.add(circle(951,51,30));
region.add(380, 51, 571, 30);
shell.setRegion(region);
Rectangle rsize = region.getBounds();
shell.setSize(rsize.width, rsize.height);

Composite main = new Composite(shell, SWT.NULL);

// make the label
cpyLbl = new Label(main, SWT.NONE);
cpyLbl.setText("Copy");

cpyLbl.setBackground(SWTResourceManager.getColor(38,255,23));

Region cpyRegion = new Region();
cpyRegion.add(0, 0, 161, 51);
cpyRegion.add(circle(28,51,28));
cpyRegion.add(28, 51, 133, 28);
cpyLbl.setRegion(cpyRegion);

// the top left of the bounds is the 0,0 of the region coordinates
// bounds are in screen coordinates (maybe shell coordinates?)
cpyLbl.setBounds(352, 0, 161, 79);
cpyLbl.setVisible(true);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top