动态窗口大小调整swt java

动态窗口大小调整swt java,java,dynamic,swt,Java,Dynamic,Swt,以下是我希望能够动态调整大小的结果(对不起,我的Gimp技能很差): 我查看了不同的SWT布局,但没有一个提供我想要的。 所以我在画布上拆分了我的窗口,并将不同的对象插入到画布上。 我知道我的问题来自.setBounds(),但我没有找到一种方法来自由放置我的对象,这很容易做到 如何更改代码,使其具有动态窗口大小调整,但结果相似 下面是一个基本示例: public class Main { private void images(Canvas Header) { // in

以下是我希望能够动态调整大小的结果(对不起,我的Gimp技能很差): 我查看了不同的SWT布局,但没有一个提供我想要的。 所以我在画布上拆分了我的窗口,并将不同的对象插入到画布上。 我知道我的问题来自
.setBounds()
,但我没有找到一种方法来自由放置我的对象,这很容易做到

如何更改代码,使其具有动态窗口大小调整,但结果相似

下面是一个基本示例:

 public class Main 
 {
  private void images(Canvas Header)
  {
    // in Header Canvas located British flag image
    imgGbFlag = new Label(Header, SWT.NONE);
    imgGbFlag.setBounds(674, 10, 32, 24);
    imgGbFlag.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
    imgGbFlag.setImage(SWTResourceManager.getImage(Main.class, "/Images/gb.png"));

    // in Header Canvas located German flag image
    imgDeFlag = new Label(Header, SWT.NONE);
    imgDeFlag.setBounds(712, 10, 32, 24);
    imgDeFlag.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
    imgDeFlag.setImage(SWTResourceManager.getImage(Main.class, "/Images/de.png"));

    // in Header Canvas located French flag image
    imgFrFlag = new Label(Header, SWT.NONE);
    imgFrFlag.setBounds(750, 10, 32, 24);
    imgFrFlag.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
    imgFrFlag.setImage(SWTResourceManager.getImage(Main.class, "/Images/fr.png"));
   }

   public void Gui(Shell shell)
   { 
     Canvas header = new Canvas(shell, SWT.NONE);
     header.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
     header.setBounds(0, 0, 792, 113);
     images(header);
   } 
}

使用FormLayout进行动态调整大小,这是调整大小问题的最佳且易于使用的布局。 您需要为shell和Canvas对象将layout设置为formlayout,这样您就可以实际决定所有小部件的位置和大小,以%为单位,而不是硬编码


您已在setBounds方法中提供了硬编码值,请尽量避免使用这些值,否则您将始终面临大小调整问题。

请务必阅读以下内容:。除非绝对必要,否则切勿使用
.setBounds()
。您可以使用
GridLayout
s(注意复数形式)轻松创建所需的GUI。在我的例子中,使用起来相当复杂,但非常有用。谢谢现在我只需要找出如何避免不同元素的重叠。Canvas对FormLayout有用吗?您也可以使用Canvas,也可以使用普通组合,这与FormLayout无关。如果您想使用绘画和GC,通常使用Canvas