FillLayout lay = new FillLayout(); Shell shell = new Shell(); shell.setLayout(lay); for(int i = 0; i < 10; i++) { Button but = new Button(shell, SWT.PUSH); but.setText(""+i); }没出现窗口
时间: 2024-01-14 14:05:13 浏览: 17
这段代码创建了一个 SWT 窗口并设置了 FillLayout 布局管理器,然后通过循环创建了 10 个按钮并添加到该窗口中。但是,你没有打开该窗口,因此没有看到任何界面。
要使窗口可见,需要调用 `Shell` 对象的 `open()` 方法。例如,可以在循环结束后添加以下代码:
```
shell.pack();
shell.open();
Display display = shell.getDisplay();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
```
这段代码中,`shell.pack()` 方法会根据窗口中的控件自动调整窗口大小,以适应控件的大小。然后调用 `shell.open()` 方法打开窗口。接着创建一个 `Display` 对象,并在一个循环中处理窗口事件,直到窗口被关闭为止。最后调用 `display.dispose()` 方法释放资源。
注意,为了使 SWT 窗口正常工作,需要在程序中创建一个 `Display` 对象,并在主线程中处理事件。如果使用 Eclipse 等 IDE,可以根据模板创建一个 SWT 应用程序,该模板会自动生成这些代码。
相关问题
FillLayout有布局data吗?代码注释
当然可以,以下是一个使用FillLayout和布局数据的示例代码(包括注释):
```java
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillData;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
public class FillLayoutExample {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("FillLayout Example");
shell.setSize(new Point(300, 200));
// 创建FillLayout布局管理器,并设置为父容器的布局
FillLayout fillLayout = new FillLayout();
shell.setLayout(fillLayout);
// 创建三个Label控件,并添加到父容器中
Label label1 = new Label(shell, SWT.NONE);
label1.setText("Label 1");
Label label2 = new Label(shell, SWT.NONE);
label2.setText("Label 2");
Label label3 = new Label(shell, SWT.NONE);
label3.setText("Label 3");
// 创建FillData布局数据,并设置给label2控件
FillData fillData = new FillData();
fillData.heightHint = 50; // 设置高度为50像素
fillData.widthHint = 50; // 设置宽度为50像素
fillData.horizontalAlignment = SWT.CENTER; // 设置水平居中对齐
fillData.verticalAlignment = SWT.CENTER; // 设置垂直居中对齐
label2.setLayoutData(fillData);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
```
在上述代码中,我们首先创建了一个FillLayout布局管理器并将其设置为父容器的布局。然后,我们创建了三个Label控件并将其添加到父容器中。最后,我们创建了一个FillData布局数据,并将其设置给第二个Label控件,以指定其大小和位置。执行该代码,将会看到三个Label控件在父容器中填充了所有可用空间,而第二个Label控件则按照FillData中的设置进行布局。
FillLayout有布局data吗?
是的,FillLayout有布局data。FillLayout是SWT的一种布局管理器,可以用来填充父容器的可用空间。在使用FillLayout时,可以使用布局数据(LayoutData)来指定每个子控件的大小和位置。FillLayout的布局数据是FillData类的实例,可以设置子控件的水平和垂直方向的填充大小和偏移量。例如,可以使用FillData来指定一个子控件在水平方向上填充父容器的50%大小,而在垂直方向上则不填充。