Я создаю простой плагин SWT Eclipse, используя WindowBuilder Pro. Когда пользователь щелкает элемент панели инструментов, мне бы хотелось, чтобы во всплывающем меню отображался класс диалогового окна, который я создал ниже, с центром в ViewPart. Кто-нибудь знает как это сделать? Это намного более интуитивно понятно в Swing ...
public class MyApp extends ViewPart {
public void createPartControl(final Composite arg0) {
arg0.setLayout(new GridLayout(1, false));
final ToolBar toolBar = new ToolBar(arg0, SWT.FLAT | SWT.RIGHT);
toolBar.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
final ToolItem connectItem = new ToolItem(toolBar, SWT.NONE);
connectItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
System.out.println("connect button clicked!");
final Shell newShell = new Shell();
newShell.setText("Connect to box");
newShell.setLayout(new GridLayout(2, false));
newShell.setSize(400, 400);
newShell.pack();
newShell.open();
final ConnectSUVDialog dialog = new ConnectBoxDialog(newShell);
}
});
.
.
.
}
}
public class ConnectSUVDialog
extends Dialog {
private Text txtHostName;
private Text txtUserName;
private Text txtPassword;
public ConnectSUVDialog(final Shell parentShell) {
super(parentShell);
}
@Override
protected Control createDialogArea(final Composite parent) {
final Composite container = (Composite) super.createDialogArea(parent);
container.setLayout(new GridLayout(2, false));
this.txtHostName = new Text(container, SWT.BORDER);
this.txtHostName.setText("host name");
this.txtHostName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
this.txtUserName = new Text(container, SWT.BORDER);
this.txtUserName.setText("user name");
this.txtUserName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
this.txtPassword = new Text(container, SWT.BORDER);
this.txtPassword.setText("password");
this.txtPassword.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
return container;
}
/**
* Create contents of the button bar.
* @param parent
*/
@Override
protected void createButtonsForButtonBar(final Composite parent) {
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
/**
* Return the initial size of the dialog.
*/
@Override
protected Point getInitialSize() {
return new Point(450, 300);
}
}