簡體   English   中英

如何使不相等的GridLayout行

[英]How to make unequal GridLayout rows

我想使行中的每個單元格都具有不同的長度。

因此,“策略”單元格和右側的文本很好。 但是,我想將第1節和第2節設置為50/50。而不是20/80或現在的水平。 我已經開始使用WindowsBuilder工具,而不是手動進行操作。 這可能嗎?

要使用SWT中的GridLayout以請求的方式對控件進行布局,您必須將每一行的控件分組為它們自己的組合,如下所示:

shell.setLayout( new RowLayout( SWT.VERTICAL ) );
Composite composite1 = new Composite( shell, SWT.NONE );
composite1.setLayout( new GridLayout( 2, false ) );
createLabel( composite1, "2020" );
createLabel( composite1, "808080808080" );

Composite composite2 = new Composite( shell, SWT.NONE );
composite2.setLayout( new GridLayout( 2, false ) );
createLabel( composite2, "50505050" );
createLabel( composite2, "50505050" );

private static Label createLabel( Composite parent, String text ) {
  Label label = new Label( parent, SWT.NONE );
  label.setText( text );
  return label;
}

但是,對我來說, FormLayout似乎更適合解決給定的問題:

shell.setLayout( new FormLayout() );
FormData leftFormData = new FormData();
leftFormData.top = new FormAttachment( 0 );
leftFormData.left = new FormAttachment( 0 );
leftFormData.right = new FormAttachment( 20 );
Label leftLabel = createLabel( shell, "2020", leftFormData );
FormData rightFormData = new FormData();
rightFormData.top = new FormAttachment( 0 );
rightFormData.left = new FormAttachment( leftLabel );
rightFormData.right = new FormAttachment( 100 );
createLabel( shell, "808080808080", rightFormData );

private static Label createLabel( Composite parent, String text, Object layoutData ) {
  Label label = new Label( parent, SWT.NONE );
  label.setText( text );
  label.setLayoutData( layoutData );
  return label;
}

如果您發現formData和formAttachment代碼過於冗長,則可以查看Slim Down SWT FormLayout的用法

對於SWT布局的深入討論,我建議您閱讀SWT中的了解布局

編輯:錯過了您正在使用SWT GridLayout而不是Swing GridLayout 我的解決方案適用於Swing因此請記住這一點。

您可能要使用GridBagLayout 它比GridLayout更復雜,但提供了更大的靈活性

此處查看有關如何使用它的一些文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM