如何在 SWT DateTime 小部件中的 DD MM 或 YYYY 字段上设置边距?

How do I set margins on the DD MM or YYYY fields within an SWT DateTime widget?

我正在使用 org.eclipse.swt.widgets.DateTime 小部件的实例让用户在 UI 中设置日期,但我在正确设置结果的边距和样式时遇到了问题。我正在使用 SWT.DATESWT.DROP_DOWN 并从开箱即用的小部件中获取我需要的一切,这很好,但是我如何让输入中的文本有边距,这样它就不会开始就在输入框的边缘?

或者,我能否以某种方式在 DateTime 内部组合中设置填充?我尝试了通常的方法,但只成功地在 Composite 本身上设置了边距...

现在,它看起来像这样:

使用此代码实例化:

    (...)
    dateInputComposite = new Composite(parent, SWT.LEFT);

    Label datumLabel = new Label(dateInputComposite, SWT.LEFT);
    dateLabel.setText(DATE_LABEL_TEXT);
    dateLabel.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_FILL));

    DateTime dateInputWidgetWidget = new DateTime(dateInputComposite, SWT.DATE | SWT.DROP_DOWN);
    // create bindings for dateInputWidgetWidget  here

    new DateTime(dateInputComposite, SWT.DATE | SWT.DROP_DOWN);
    GridLayoutFactory.fillDefaults().margins(0, 0).numColumns(3).applyTo(dateInputComposite);

如果您不介意使用 Nebula's CDateTime,那么您可以定义自己的模式并将其设置为:" dd/MM/yyyy"(注意开头的 space 字符)添加一些人为的 margin/padding.

这是一个例子:

public static void main(String[] args)
{
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("Whosebug");
    shell.setLayout(new FillLayout());

    CDateTime dateTime = new CDateTime(shell, CDT.DATE_MEDIUM | CDT.DROP_DOWN);
    dateTime.setPattern(" dd/MM/yyyy");
    dateTime.setSelection(new Date());

    shell.pack();
    shell.open();

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

看起来像这样:

或使用 " dd / MM / yyyy ":

在每个组件周围添加填充