[英]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.