本文介紹了可以將FormLayout放入GridLayout中嗎?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我嘗試將FormLayout組合放入GridLayout網格,但遇到異常。我是不是做錯了什么,或者這根本不可能?以下是我的代碼:
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class formlayout {
public static void main(String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
GridLayout layout= new GridLayout(1, false);
shell.setLayout(layout);
Composite inputs = new Composite(shell, SWT.NONE);
inputs.setLayout(new FormLayout());
FormData fd1 = new FormData();
fd1.left = new FormAttachment(0, 0);
fd1.right = new FormAttachment(100,0);
inputs.setLayoutData(fd1);
Button button1 = new Button(shell, SWT.PUSH);
button1.setText("B1");
button1.setLayoutData(new FormData());
FormData formData = new FormData();
formData.left = new FormAttachment(20,0);
formData.right = new FormAttachment(100,0);
button1.setLayoutData(formData);
Button button2 = new Button(shell, SWT.PUSH);
button2.setText("B2");
button2.setLayoutData(new FormData());
FormData formData2 = new FormData();
formData2.left = new FormAttachment(0,0);
formData2.right = new FormAttachment(20,0);
button2.setLayoutData(formData2);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
我得到的異常是:
Exception in thread "main" java.lang.ClassCastException: org.eclipse.swt.layout.FormData cannot be cast to org.eclipse.swt.layout.GridData
當然,這只是一個演示問題的示例腳本。實際上,外殼在代碼中的定義較低,并且它被設置為GridLayout,所以我無法真正改變這一點,但我仍然需要使用FormLayout通過按鈕來實現我的目標。
推薦答案
在此代碼中:
Composite inputs = new Composite(shell, SWT.NONE);
inputs.setLayout(new FormLayout());
FormData fd1 = new FormData();
fd1.left = new FormAttachment(0, 0);
fd1.right = new FormAttachment(100,0);
inputs.setLayoutData(fd1);
您正在inputs
的布局數據中設置FormData
。布局數據由為控件的父級指定的布局使用-在本例中,父級是使用GridLayout
的shell
。
因此,當shell
的網格布局正在進行布局時,它希望其所有子對象在布局數據中都有GridData
,但您有FormData
,因此它正在執行的強制轉換失敗。
inputs
的布局數據指定GridData
,inputs
的子控件只使用FormData
。
這篇關于可以將FormLayout放入GridLayout中嗎?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,