【问题标题】:Some questions about WindowBuilder SWT java gui building关于WindowBuilder SWT java gui搭建的一些问题
【发布时间】:2018-08-17 08:40:52
【问题描述】:

我正在尝试学习 WindowBuilder SWT,但我在寻找好的示例或好的教程时遇到了问题,这些示例或教程提供了有关如何正确 GUI 的真实解释,例如所有组件都位于外壳的中间。

我可以找到一些超级简单的教程,你可以在其中只看到 windowbuilder 和类似 hello world 项目的组件和部分。

我只发现您可以使用网格布局并制作一个标签来填充所有宽度和高度然后居中,但这不是我想要实现的行为。

我希望那组组件在屏幕上居中而不填满屏幕。我的意思是当用户最大化屏幕时组件不能变大。

在 Android 中这很简单,您只需将 Layout 放在 Layout 中,并且在父布局中您必须简单地将其内容居中。但是在这里我找不到方法。即使我找不到将布局放入布局的方法。所以我不明白如何做很酷的图形用户界面。这些是我的问题:

  1. 即使在外壳最大化的情况下,我如何才能将一组组件(例如,登录面板)置于外壳的中心?

  2. 可以把布局放在布局里面吗?如果没有,那我怎么做复杂又漂亮的图形用户界面呢?

  3. 是否有任何地方可以下载示例代码的存储库,其中包含使用 WindowBuilder SWT 完成的复杂或漂亮的 GUI?

【问题讨论】:

  • 对于多个布局,使用嵌套的Composite 控件 - 每个复合材料一个布局。 SWT site 有很多 sn-ps 和示例,但它们并不专注于 WindowBuilder。
  • @greg-449 我试过了,但是当我放置一个组合并尝试使用 windowBuilder 设置布局时,它设置为主组合而不是嵌套组合
  • 我不使用 WindowBuilder,所以我不能说你是如何做到的。 “手动”没有问题。
  • @greg-449 你用什么?你知道如何解决我帖子的问题1吗?
  • 我不使用任何类型的窗口设计器,除了 Eclipse e4 应用程序模型编辑器(它只涵盖了应用程序的轮廓)。我添加了一个简单的示例 SWT 应用程序,它在 shell 中以 Composite 为中心。

标签: java eclipse swt windowbuilder


【解决方案1】:

这是一个简单的 SWT 应用程序,它在 shell 中显示居中的控件。它是一个以壳为中心的内部复合材料。

  public static void main(final String [] args)
  {
    Display.setAppName("Stackoverflow");

    Display display = new Display();

    Shell shell = new Shell(display, SWT.SHELL_TRIM);

    shell.setText("Stack Overflow");

    shell.setSize(1000, 800);

    shell.setLayout(GridLayoutFactory.swtDefaults().create());

    Composite inner = new Composite(shell, SWT.BORDER);
    inner.setLayoutData(GridDataFactory.swtDefaults().align(SWT.CENTER, SWT.CENTER).grab(true, true).create());

    inner.setLayout(GridLayoutFactory.swtDefaults().create());

    Text text = new Text(inner, SWT.LEAD);
    text.setLayoutData(GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).hint(200, SWT.DEFAULT).create());

    Button button = new Button(inner, SWT.PUSH);
    button.setText("Login");
    button.setLayoutData(GridDataFactory.swtDefaults().align(SWT.CENTER, SWT.CENTER).create());

    shell.open();

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

    display.dispose();
  }

我使用了GridDataFactoryGridLayoutFactory 而不是GridLayoutGridData,因为我认为它们更容易理解。

【讨论】:

    【解决方案2】:

    Windowbuilder 是一个非常强大的工具,但是当您不熟悉 GUI 设计时,您应该花时间阅读手册。请谷歌“WindowBuilder用户指南”,你会找到手册。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-18
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      • 2013-07-07
      相关资源
      最近更新 更多