SWT - TitleAreaDialog

3

我正在尝试使用SWT和JFace创建基本对话框类:

 public class AplotBaseDialog extends TitleAreaDialog

我对如何布局对话框感到困惑?

如果使用Swing,我会使用createDialog方法。 然后在该方法中,我将添加作为JPanel方法的组件。 然后将这些组件添加到我的centerPanel中。 这是基本对话框。 每个面板方法都有自己的布局。

这是一个非常简单的示例(伪代码)

public void createDialog() {
   Component selectionsPanel = createTableArea();
   Component buttonPanel = OKCancelButtons();
   JPanel centerPanel = new JPanel();
   centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.PAGE_AXIS));
   centerPanel.add(selectionsPanel);
   centerPanel.add(buttonPanel);
   getContentPane().add(centerPanel);
   this.pack();
   centerPanel.setVisible(true); 
}

private JPanel OKCancelButtons() {

  submitButton = new JButton("Send");
  etc... etc..
  JPanel p = new JPanel();
  p.setLayout(new BoxLayout(p, BoxLayout.LINE_AXIS));
  p.add(submitButton);
  return p;
}

private JPanel createTableArea() {
  JPanel p = new JPanel();
  similar to above but a Table;
  return p;
}
您可以看到我是如何在方法中创建面板,然后将它们作为组件添加到基础面板中的。 使用 TitleAreaDialog,您会如何做到这一点?

如果我理解得正确,当您打开对话框时,它就像是一个空画布。然后您开始创建您的组合。protected void a(composite parent) {layout manager}protected void b(composite parent) {layout manager}因此,a和b两个组合都在父组合中,在对话框窗口中显示,并且它们的布局来自于方法中的布局管理器。 - jkteater
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
4

我还没有使用过TitleAreaDialog,但是这里有一个我自己使用的简单对话框Dialog。它应该可以让你了解对话框的内部工作原理。它基本上就是一个带有一些错误消息和复选框的对话框:

public class CheckboxDialog extends Dialog {

    private String message = "";
    private String checkboxMessage = "";
    private boolean checkValue;

    private Button checkButton;

    /* Constructor, set shell style and set block on open (rest of gui is blocked until closed) */
    public CheckboxDialog(Shell parentShell) {
        super(parentShell);
        setShellStyle(SWT.CLOSE | SWT.TITLE | SWT.BORDER | SWT.OK | SWT.APPLICATION_MODAL);
        setBlockOnOpen(true);
    }

    /* creates the content of the dialog */
    protected Control createDialogArea(Composite parent) {
        Composite composite = (Composite) super.createDialogArea(parent);

        /* set the layout for the content (gridlayout with 1 column)*/
        GridLayout layout = new GridLayout(1, false);
        layout.marginHeight = 15;
        layout.marginWidth = 30;
        composite.setLayout(layout);

        /* add a label with some text */
        final Label content = new Label(composite, SWT.NONE);
        content.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
        content.setText(message);

        /* add a checkbox button */
        checkButton = new Button(composite, SWT.CHECK);
        checkButton.setText(checkboxMessage);
        checkButton.setSelection(true);
        checkButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));

        return composite;
    }

    /* create the dialog buttons (in this case, only an OK button) */
    protected void createButtonsForButtonBar(Composite parent)
    {
        createButton(parent, IDialogConstants.OK_ID, "OK", true);
    }

    /* configure the dialog's shell (set title) */
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setText("Error");
    }

    /* this method is executed if the OK button is pressed */
    public void okPressed()
    {
        checkValue = checkButton.getSelection();
        close();
    }

    /* getter and setter methods */
    public void setMessage(String message) {
        this.message = message;
    }

    public void setCheckboxMessage(String checkboxMessage) {
        this.checkboxMessage = checkboxMessage;
    }

    public boolean getCheckBoxValue()
    {
        return checkValue;
    }
}
正如你所看到的,在 SWT 中没有 add 方法。你只需要在每个小部件的构造函数中指定父级。 此外,这里 是 Vogella 的一个非常好的教程,详细解释了如何创建 JFace 对话框。这里 是另一个使用 TitleAreaDialog 的示例。

如果我理解正确的话 - 当您打开对话框时就像是一个空画布。然后开始创建您的组合部件。protected void a (composite parent) { - jkteater
@jkteater 是的,一个简单的对话框是空的,即包含一个空的“Composite”。这个“Composite”在“createDialogArea(Composite parent)”方法中填充,并在之后返回。当您打开对话框时,此方法会自动调用。您不必自己执行此操作。 - Baz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,