Jface的hello World網(wǎng)上到處都是,但簡單的Hello world能引出很多需要注意的問題.
首先大部分網(wǎng)上的jface helloworld如下:
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;



public class TestWindow extends ApplicationWindow
{


public TestWindow()
{
super(null);
}

protected Control createContents(Composite parent)
{
Text text = new Text(parent,SWT.NONE);
text.setText("hello world");
return parent;
}

public static void main(String args[])
{

try
{
TestWindow window = new TestWindow();
window.setBlockOnOpen(true);
window.open();
Display.getCurrent().dispose();

} catch (Exception e)
{
e.printStackTrace();
}
}
}

這個(gè)代碼是可以運(yùn)行的,而且運(yùn)行的結(jié)果也看不出什么問題。但看不出來并不代表沒有問題。下邊我們來讓問題顯現(xiàn)
在createContents()函數(shù)中再加入一個(gè)Text代碼變成
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;



public class TestWindow extends ApplicationWindow
{


public TestWindow()
{
super(null);
}

protected Control createContents(Composite parent)
{
Text text = new Text(parent,SWT.NONE);
text.setText("hello world");
Text text1 = new Text(parent,SWT.NONE);
text1.setText("it's me");
return parent;
}

public static void main(String args[])
{

try
{
TestWindow window = new TestWindow();
window.setBlockOnOpen(true);
window.open();
Display.getCurrent().dispose();

} catch (Exception e)
{
e.printStackTrace();
}
}
}

運(yùn)行,并沒有看到第二個(gè)Text,為什么?
是否沒有設(shè)置text的Bounds?好設(shè)置一下
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;



public class TestWindow extends ApplicationWindow
{


public TestWindow()
{
super(null);
}

protected Control createContents(Composite parent)
{

Text text = new Text(parent, SWT.BORDER);
text.setText("hello world");
text.setBounds(59, 112, 80, 25);
Text text_1 = new Text(parent, SWT.BORDER);
text_1.setText("it's me");
text_1.setBounds(72, 221, 80, 25);
return parent;
}

public static void main(String args[])
{

try
{
TestWindow window = new TestWindow();
window.setBlockOnOpen(true);
window.open();
Display.getCurrent().dispose();

} catch (Exception e)
{
e.printStackTrace();
}
}

private void createActions()
{
}
}

效果依舊,那是為什么呢?
這是因?yàn)樵赾reateContents()方法中直接使用了參數(shù)中的parent,造成了布局(layout)的混亂,在只有一個(gè)的text的情況下看不出來,現(xiàn)在就看出來了。
解決辦法:再構(gòu)造一個(gè)composite,在我們平時(shí)使用的時(shí)候記得一定要構(gòu)造一個(gè)自己的composite,設(shè)置自己的布局,不要直接使用參數(shù)中的composite
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;



public class TestWindow extends ApplicationWindow
{


public TestWindow()
{
super(null);
}

protected Control createContents(Composite parent)
{
Composite container = new Composite(parent, SWT.NONE);

Text text = new Text(container, SWT.BORDER);
text.setText("hello world");
text.setBounds(59, 112, 80, 25);
Text text_1 = new Text(container, SWT.BORDER);
text_1.setText("it's me");
text_1.setBounds(72, 221, 80, 25);
return container;
}

public static void main(String args[])
{

try
{
TestWindow window = new TestWindow();
window.setBlockOnOpen(true);
window.open();
Display.getCurrent().dispose();

} catch (Exception e)
{
e.printStackTrace();
}
}

private void createActions()
{
}
}
