Java 如何在SWT中使用FormLayout使按钮居中?

Java 如何在SWT中使用FormLayout使按钮居中?,java,swt,Java,Swt,如何使用表单布局将按钮(垂直)放置在中心位置(请参见)?使用: 我最终得到了 这并不奇怪,因为我告诉它把按钮的顶部放在中间(layoutData.top=newformattachment(50);)。如何将按钮的中心置于中心?您可以使用构造函数指定偏移: new FormAttachment(int numerator, int offset) 看起来像这样: 可以使用以下公式计算偏移: final Button button = new Button(shell, SWT.NONE);

如何使用
表单布局将
按钮(垂直)放置在中心位置(请参见)?使用:

我最终得到了


这并不奇怪,因为我告诉它把按钮的顶部放在中间(
layoutData.top=newformattachment(50);
)。如何将按钮的中心置于中心?

您可以使用构造函数指定偏移:

new FormAttachment(int numerator, int offset)
看起来像这样:

可以使用以下公式计算偏移:

final Button button = new Button(shell, SWT.NONE);
button.setText("Button");

final FormData layoutData = new FormData();

/* Compute the offset */
int offset = -button.computeSize(SWT.DEFAULT, SWT.DEFAULT).y / 2;

/* Create the FormAttachment */
layoutData.top = new FormAttachment(50, offset);
layoutData.left = new FormAttachment(0);
layoutData.right = new FormAttachment(100);
button.setLayoutData(layoutData);

如果调整窗口的大小,此操作将不起作用。我想您需要某种调整大小的侦听器,然后重新计算偏移量。哦,好吧,只使用带有单个网格和GridData的GridLayout(GridData.CENTER,GridData.CENTER,true,true)可能更容易。@NeemePraks不,你不需要监听调整大小事件。
formattachment
使用百分比。只有当
按钮的高度发生变化时,才需要对其进行更新,而这通常不会发生变化。
final Button button = new Button(shell, SWT.NONE);
button.setText("Button");

final FormData layoutData = new FormData();

/* Compute the offset */
int offset = -button.computeSize(SWT.DEFAULT, SWT.DEFAULT).y / 2;

/* Create the FormAttachment */
layoutData.top = new FormAttachment(50, offset);
layoutData.left = new FormAttachment(0);
layoutData.right = new FormAttachment(100);
button.setLayoutData(layoutData);