??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
http://www.eclipse.org/articles/Article-Understanding-Layouts/Understanding-Layouts.htm
DropTarget target = new DropTarget(label, operations);
target.setTransfer(types);
target.addDropListener (new DropTargetAdapter() {
public void drop(DropTargetEvent event) {
if (event.data == null) {
event.detail = DND.DROP_NONE;
return;
}
label.setText ((String) event.data);
}
});
}
2、随意拖拽Tree子节炏V?br />
public static void main (String [] args) {
final Display display = new Display ();
final Shell shell = new Shell (display);
shell.setLayout(new FillLayout());
//建立用于拖拽的树
final Tree tree = new Tree(shell, SWT.BORDER);
for (int i = 0; i < 3; i++) {
TreeItem item = new TreeItem(tree, SWT.NONE);
item.setText("item "+i);
for (int j = 0; j < 3; j++) {
TreeItem subItem = new TreeItem(item, SWT.NONE);
subItem.setText("item "+i+" "+j);
for (int k = 0; k < 3; k++) {
TreeItem subsubItem = new TreeItem(subItem, SWT.NONE);
subsubItem.setText("item "+i+" "+j+" "+k);
}
}
}
Transfer[] types = new Transfer[] {TextTransfer.getInstance()};
int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
//建立拖拽 源————树tree对象
final DragSource source = new DragSource (tree, operations);
source.setTransfer(types);
final TreeItem[] dragSourceItem = new TreeItem[1];
source.addDragListener (new DragSourceListener () {
public void dragStart(DragSourceEvent event) {
TreeItem[] selection = tree.getSelection(); // 获取所选tree的节?br /> if (selection.length > 0 && selection[0].getItemCount() == 0) //判断所选节Ҏ否存在ƈ且ؓ末端节点
{
event.doit = true; //启动拖拽功能
dragSourceItem[0] = selection[0]; //保存拖拽节点信息
} else {
event.doit = false;
}
};
public void dragSetData (DragSourceEvent event) {
event.data = dragSourceItem[0].getText(); //保存拖拽节点信息C件数据中
}
public void dragFinished(DragSourceEvent event) {
if (event.detail == DND.DROP_MOVE)
dragSourceItem[0].dispose();
dragSourceItem[0] = null;
}
});
//建立拖拽 目的————树tree对象
DropTarget target = new DropTarget(tree, operations);
target.setTransfer(types);
target.addDropListener (new DropTargetAdapter() {
//处理拖拽到目的上I时的方?br /> public void dragOver(DropTargetEvent event) {
event.feedback = DND.FEEDBACK_EXPAND | DND.FEEDBACK_SCROLL; //响应拖拽动作QFEEDBACK_EXPAND表示拖拽到可以展开的节Ҏ展开相应节点?br /> if (event.item != null) {
TreeItem item = (TreeItem)event.item;
//处理拖拽动作响应Q根据拖拽的位置不同产生不同的响?br /> Point pt = display.map(null, tree, event.x, event.y); //获取拖拽当前位置?br /> Rectangle bounds = item.getBounds(); //获取目的节点的边?br />
//Ҏ拖拽当前位置点与目的节点的边框位|设|响应,如显CZؓFEEDBACK_INSERT_BEFORE、FEEDBACK_INSERT_AFTER
if (pt.y < bounds.y + bounds.height/3) {
event.feedback |= DND.FEEDBACK_INSERT_BEFORE;
} else if (pt.y > bounds.y + 2*bounds.height/3) {
event.feedback |= DND.FEEDBACK_INSERT_AFTER;
} else {
event.feedback |= DND.FEEDBACK_SELECT;
}
}
}
//处理放下时的Ҏ
public void drop(DropTargetEvent event) {
if (event.data == null) {
event.detail = DND.DROP_NONE;
return;
}
String text = (String)event.data;
//如果放下的位|没有节点,则新建立一个节点,以根节点为父节点
if (event.item == null)
{
TreeItem item = new TreeItem(tree, SWT.NONE);
item.setText(text);
}
//如果放下的位|有节点
else
{
TreeItem item = (TreeItem)event.item;
Point pt = display.map(null, tree, event.x, event.y);
Rectangle bounds = item.getBounds();
TreeItem parent = item.getParentItem();
if (parent != null) {
TreeItem[] items = parent.getItems();
int index = 0;
for (int i = 0; i < items.length; i++) {
if (items[i] == item) {
index = i;
break;
}
}
if (pt.y < bounds.y + bounds.height/3) {
//以当前节点的父节点ؓ父徏立一个子节点Qƈ且插入到当前节点?br /> TreeItem newItem = new TreeItem(parent, SWT.NONE, index);
newItem.setText(text);
} else if (pt.y > bounds.y + 2*bounds.height/3) {
//以当前节点的父节点ؓ父徏立一个子节点Qƈ且插入到当前节点?br /> TreeItem newItem = new TreeItem(parent, SWT.NONE, index+1);
newItem.setText(text);
} else {
//以当前ؓ父节点徏立一个子节点
TreeItem newItem = new TreeItem(item, SWT.NONE);
newItem.setText(text);
}
} else {
TreeItem[] items = tree.getItems();
int index = 0;
for (int i = 0; i < items.length; i++) {
if (items[i] == item) {
index = i;
break;
}
}
if (pt.y < bounds.y + bounds.height/3) {
TreeItem newItem = new TreeItem(tree, SWT.NONE, index);
newItem.setText(text);
} else if (pt.y > bounds.y + 2*bounds.height/3) {
TreeItem newItem = new TreeItem(tree, SWT.NONE, index+1);
newItem.setText(text);
} else {
TreeItem newItem = new TreeItem(item, SWT.NONE);
newItem.setText(text);
}
}
}
}
});
shell.setSize (400, 400);
shell.open ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}
public static void main (String [] args) {
Display display = new Display ();
Shell shell = new Shell (display);
shell.setBounds (10, 10, 300, 200);
// create the composite that the pages will share
final Composite contentPanel = new Composite (shell, SWT.BORDER);
contentPanel.setBounds (100, 10, 190, 90);
final StackLayout layout = new StackLayout ();
contentPanel.setLayout (layout);
// create the first page's content
Composite page0;
page0 = new Composite (contentPanel, SWT.NONE);
page0.setLayout (new RowLayout ());
Label label = new Label (page0, SWT.NONE);
label.setText ("Label on page 1");
label.pack ();
// create the second page's content
Composite page1;
page1 = new Composite (contentPanel, SWT.NONE);
page1.setLayout (new RowLayout ());
Button button = new Button (page1, SWT.NONE);
button.setText ("Button on page 2");
button.pack ();
// create the button that will switch between the pages
Button pageButton = new Button (shell, SWT.PUSH);
pageButton.setText ("Push");
pageButton.setBounds (10, 10, 80, 25);
pageButton.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event event) {
pageNum = ++pageNum % 2;
contentPanel.layout ();
}
});
layout.topControl = page0;
shell.open ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("SWT and Swing/AWT Example");
Listener exitListener = new Listener() {
public void handleEvent(Event e) {
MessageBox dialog = new MessageBox(shell, SWT.OK | SWT.CANCEL | SWT.ICON_QUESTION);
dialog.setText("Question");
dialog.setMessage("Exit?");
if (e.type == SWT.Close) e.doit = false;
if (dialog.open() != SWT.OK) return;
shell.dispose();
}
};
Listener aboutListener = new Listener() {
public void handleEvent(Event e) {
final Shell s = new Shell(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
s.setText("About");
GridLayout layout = new GridLayout(1, false);
layout.verticalSpacing = 20;
layout.marginHeight = layout.marginWidth = 10;
s.setLayout(layout);
Label label = new Label(s, SWT.NONE);
label.setText("SWT and AWT Example.");
Button button = new Button(s, SWT.PUSH);
button.setText("OK");
GridData data = new GridData();
data.horizontalAlignment = GridData.CENTER;
button.setLayoutData(data);
button.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
s.dispose();
}
});
s.pack();
Rectangle parentBounds = shell.getBounds();
Rectangle bounds = s.getBounds();
int x = parentBounds.x + (parentBounds.width - bounds.width) / 2;
int y = parentBounds.y + (parentBounds.height - bounds.height) / 2;
s.setLocation(x, y);
s.open();
while (!s.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
}
};
shell.addListener(SWT.Close, exitListener);
Menu mb = new Menu(shell, SWT.BAR);
MenuItem fileItem = new MenuItem(mb, SWT.CASCADE);
fileItem.setText("&File");
Menu fileMenu = new Menu(shell, SWT.DROP_DOWN);
fileItem.setMenu(fileMenu);
MenuItem exitItem = new MenuItem(fileMenu, SWT.PUSH);
exitItem.setText("&Exit\tCtrl+X");
exitItem.setAccelerator(SWT.CONTROL + 'X');
exitItem.addListener(SWT.Selection, exitListener);
MenuItem aboutItem = new MenuItem(fileMenu, SWT.PUSH);
aboutItem.setText("&About\tCtrl+A");
aboutItem.setAccelerator(SWT.CONTROL + 'A');
aboutItem.addListener(SWT.Selection, aboutListener);
shell.setMenuBar(mb);
RGB color = shell.getBackground().getRGB();
Label separator1 = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
Label locationLb = new Label(shell, SWT.NONE);
locationLb.setText("Location:");
Composite locationComp = new Composite(shell, SWT.EMBEDDED);
ToolBar toolBar = new ToolBar(shell, SWT.FLAT);
ToolItem exitToolItem = new ToolItem(toolBar, SWT.PUSH);
exitToolItem.setText("&Exit");
exitToolItem.addListener(SWT.Selection, exitListener);
ToolItem aboutToolItem = new ToolItem(toolBar, SWT.PUSH);
aboutToolItem.setText("&About");
aboutToolItem.addListener(SWT.Selection, aboutListener);
Label separator2 = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
final Composite comp = new Composite(shell, SWT.NONE);
final Tree fileTree = new Tree(comp, SWT.SINGLE | SWT.BORDER);
Sash sash = new Sash(comp, SWT.VERTICAL);
Composite tableComp = new Composite(comp, SWT.EMBEDDED); //Composite对象必须为SWT.EMBEDDED才可以装载awt/swing内容
Label separator3 = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
Composite statusComp = new Composite(shell, SWT.EMBEDDED);
java.awt.Frame locationFrame = SWT_AWT.new_Frame(locationComp);
final java.awt.TextField locationText = new java.awt.TextField();
locationFrame.add(locationText);
//处理awt?br /> java.awt.Frame fileTableFrame = SWT_AWT.new_Frame(tableComp);
java.awt.Panel panel = new java.awt.Panel(new java.awt.BorderLayout());
fileTableFrame.add(panel);
final JTable fileTable = new JTable(new FileTableModel(null));
fileTable.setDoubleBuffered(true);
fileTable.setShowGrid(false);
fileTable.createDefaultColumnsFromModel();
JScrollPane scrollPane = new JScrollPane(fileTable);
panel.add(scrollPane);
//处理awt状态Label
java.awt.Frame statusFrame = SWT_AWT.new_Frame(statusComp);
statusFrame.setBackground(new java.awt.Color(color.red, color.green, color.blue));
final java.awt.Label statusLabel = new java.awt.Label();
statusFrame.add(statusLabel);
statusLabel.setText("Select a file");
sash.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
if (e.detail == SWT.DRAG) return;
GridData data = (GridData)fileTree.getLayoutData();
Rectangle trim = fileTree.computeTrim(0, 0, 0, 0);
data.widthHint = e.x - trim.width;
comp.layout();
}
});
File[] roots = File.listRoots();
for (int i = 0; i < roots.length; i++) {
File file = roots[i];
TreeItem treeItem = new TreeItem(fileTree, SWT.NONE);
treeItem.setText(file.getAbsolutePath());
treeItem.setData(file);
new TreeItem(treeItem, SWT.NONE);
}
fileTree.addListener(SWT.Expand, new Listener() {
public void handleEvent(Event e) {
TreeItem item = (TreeItem)e.item;
if (item == null) return;
if (item.getItemCount() == 1) {
TreeItem firstItem = item.getItems()[0];
if (firstItem.getData() != null) return;
firstItem.dispose();
} else {
return;
}
File root = (File)item.getData();
File[] files = root.listFiles();
if (files == null) return;
for (int i = 0; i < files.length; i++) {
File file = files[i];
if (file.isDirectory()) {
TreeItem treeItem = new TreeItem(item, SWT.NONE);
treeItem.setText(file.getName());
treeItem.setData(file);
new TreeItem(treeItem, SWT.NONE);
}
}
}
});
fileTree.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
TreeItem item = (TreeItem)e.item;
if (item == null) return;
final File root = (File)item.getData();
EventQueue.invokeLater(new Runnable() {
public void run() {
statusLabel.setText(root.getAbsolutePath());
locationText.setText(root.getAbsolutePath());
fileTable.setModel(new FileTableModel(root.listFiles()));
}
});
}
});
GridLayout layout = new GridLayout(4, false);
layout.marginWidth = layout.marginHeight = 0;
layout.horizontalSpacing = layout.verticalSpacing = 1;
shell.setLayout(layout);
GridData data;
data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 4;
separator1.setLayoutData(data);
data = new GridData();
data.horizontalSpan = 1;
data.horizontalIndent = 10;
locationLb.setLayoutData(data);
data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 2;
data.heightHint = locationText.getPreferredSize().height;
locationComp.setLayoutData(data);
data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 1;
toolBar.setLayoutData(data);
data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 4;
separator2.setLayoutData(data);
data = new GridData(GridData.FILL_BOTH);
data.horizontalSpan = 4;
comp.setLayoutData(data);
data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 4;
separator3.setLayoutData(data);
data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 4;
data.heightHint = statusLabel.getPreferredSize().height;
statusComp.setLayoutData(data);
layout = new GridLayout(3, false);
layout.marginWidth = layout.marginHeight = 0;
layout.horizontalSpacing = layout.verticalSpacing = 1;
comp.setLayout(layout);
data = new GridData(GridData.FILL_VERTICAL);
data.widthHint = 200;
fileTree.setLayoutData(data);
data = new GridData(GridData.FILL_VERTICAL);
sash.setLayoutData(data);
data = new GridData(GridData.FILL_BOTH);
tableComp.setLayoutData(data);
shell.open();
while(!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
public void handleEvent(Event event)
{
switch (event.type)
{
case SWT.MouseMove :
if ((event.stateMask & SWT.BUTTON1) == 0)
break; // 判断是否为鼠标左键,如果不是跛_
GC gc = new GC(shell);
gc.drawLine(lastX, lastY, event.x, event.y);
gc.dispose();
// FALL THROUGH
case SWT.MouseDown :
lastX = event.x;
lastY = event.y;
break;
}
}
};
shell.addListener(SWT.MouseDown, listener);
shell.addListener(SWT.MouseMove, listener);
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
2、在弹出H口中显C的当时图像状态?br /> public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("Widget");
//建立一个简单的?br /> final Table table = new Table(shell, SWT.MULTI);
table.setLinesVisible(true);
table.setBounds(10, 10, 100, 100);
for (int i = 0; i < 9; i++) {
new TableItem(table, SWT.NONE).setText("item" + i);
}
//建立捕捉囑փ的按?br /> Button button = new Button(shell, SWT.PUSH);
button.setText("Capture");
button.pack();
button.setLocation(10, 140);
button.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
Point tableSize = table.getSize(); //获取表的大小
GC gc = new GC(table); //建立表的GC对象
final Image image =
new Image(display, tableSize.x, tableSize.y); //建立表大的囑փimage
gc.copyArea(image, 0, 0); //利用表的GC对象把表的图像复制到image?br /> gc.dispose();
//建立一个弹出面板Shell对象popup
Shell popup = new Shell(shell);
popup.setText("Image");
popup.addListener(SWT.Close, new Listener() {
public void handleEvent(Event e) {
image.dispose();
}
});
//在popup上徏立画布对象canvas
Canvas canvas = new Canvas(popup, SWT.NONE);
canvas.setBounds(10, 10, tableSize.x+10, tableSize.y+10);
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
e.gc.drawImage(image, 0, 0); //在画布上l出表的囑փimage
}
});
popup.pack();
popup.open();
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
3、获取整个窗口的囑փq显C?br /> public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Button button = new Button(shell, SWT.PUSH);
button.setText("Capture");
button.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
/* Take the screen shot */
GC gc = new GC(display);
final Image image = new Image(display, display.getBounds());
gc.copyArea(image, 0, 0);
gc.dispose();
Shell popup = new Shell(shell, SWT.SHELL_TRIM);
popup.setLayout(new FillLayout());
popup.setText("Image");
popup.setBounds(50, 50, 200, 200);
popup.addListener(SWT.Close, new Listener() {
public void handleEvent(Event e) {
image.dispose();
}
});
ScrolledComposite sc = new ScrolledComposite (popup, SWT.V_SCROLL | SWT.H_SCROLL);
Canvas canvas = new Canvas(sc, SWT.NONE);
sc.setContent(canvas);
canvas.setBounds(display.getBounds ());
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
e.gc.drawImage(image, 0, 0);
}
});
popup.open();
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
display.dispose();
}
4、用transform、alpha和paths混合技术绘图。注意:必须在项目中import“swt-gdip-win32-3139.dll”?br /> public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("Advanced Graphics");
FontData fd = shell.getFont().getFontData()[0];
final Font font = new Font(display, fd.getName(), 60, SWT.BOLD | SWT.ITALIC);
final Image image = new Image(display, 640, 480);
final Rectangle rect = image.getBounds();
GC gc = new GC(image);
gc.setBackground(display.getSystemColor(SWT.COLOR_RED));
gc.fillOval(rect.x, rect.y, rect.width, rect.height);
gc.dispose();
shell.addListener(SWT.Paint, new Listener() {
public void handleEvent(Event event) {
GC gc = event.gc;
Transform tr = new Transform(display);
tr.translate(50, 120);
tr.rotate(-30);
gc.drawImage(image, 0, 0, rect.width, rect.height, 0, 0, rect.width / 2, rect.height / 2);
gc.setAlpha(100);
gc.setTransform(tr);
Path path = new Path(display);
path.addString("SWT", 0, 0, font);
gc.setBackground(display.getSystemColor(SWT.COLOR_GREEN));
gc.setForeground(display.getSystemColor(SWT.COLOR_BLUE));
gc.fillPath(path);
gc.drawPath(path);
tr.dispose();
path.dispose();
}
});
shell.setSize(shell.computeSize(rect.width / 2, rect.height / 2));
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
image.dispose();
font.dispose();
display.dispose();
}
5、对囑փq行旋{?br /> public static void main(String[] args) {
final Display display = new Display();
final Image image = new Image(display, 110, 60);
GC gc = new GC(image);
Font font = new Font(display, "Times", 30, SWT.BOLD);
gc.setFont(font);
gc.setBackground(display.getSystemColor(SWT.COLOR_RED));
gc.fillRectangle(0, 0, 110, 60);
gc.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
gc.drawText("SWT", 10, 10, true);
font.dispose();
gc.dispose();
final Rectangle rect = image.getBounds();
Shell shell = new Shell(display);
shell.setText("Matrix Tranformations");
shell.setLayout(new FillLayout());
final Canvas canvas = new Canvas(shell, SWT.DOUBLE_BUFFERED);
canvas.addPaintListener(new PaintListener () {
public void paintControl(PaintEvent e) {
GC gc = e.gc;
gc.setAdvanced(true);
if (!gc.getAdvanced()){
gc.drawText("Advanced graphics not supported", 30, 30, true);
return;
}
// Original image
int x = 30, y = 30;
gc.drawImage(image, x, y);
x += rect.width + 30;
Transform transform = new Transform(display);
// Note that the tranform is applied to the whole GC therefore
// the coordinates need to be adjusted too.
// Reflect around the y axis.
transform.setElements(-1, 0, 0, 1, 0 ,0);
gc.setTransform(transform);
gc.drawImage(image, -1*x-rect.width, y);
x = 30; y += rect.height + 30;
// Reflect around the x axis.
transform.setElements(1, 0, 0, -1, 0, 0);
gc.setTransform(transform);
gc.drawImage(image, x, -1*y-rect.height);
x += rect.width + 30;
// Reflect around the x and y axes
transform.setElements(-1, 0, 0, -1, 0, 0);
gc.setTransform(transform);
gc.drawImage(image, -1*x-rect.width, -1*y-rect.height);
x = 30; y += rect.height + 30;
// Shear in the x-direction
transform.setElements(1, 0, -1, 1, 0, 0);
gc.setTransform(transform);
gc.drawImage(image, 300, y);
// Shear in y-direction
transform.setElements(1, -1, 0, 1, 0, 0);
gc.setTransform(transform);
gc.drawImage(image, 150, 475);
// Rotate by 45 degrees
float cos45 = (float)Math.cos(45);
float sin45 = (float)Math.sin(45);
transform.setElements(cos45, sin45, -sin45, cos45, 0, 0);
gc.setTransform(transform);
gc.drawImage(image, 350, 100);
transform.dispose();
}
});
shell.setSize(350, 550);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
image.dispose();
display.dispose();
}
SWT?/span>Eclipse囑ŞAPI的基Q本节将单介l一?/span>SWT中所包含的子包?/span>
1?/span>org.eclipse.swt.widgets
最常用的组件基本都在此包中Q如Button?/span>Text?/span>Label?/span>Combo{。其中两个最重要的组件当?/span>Shell?/span>CompositeQ?/span>Shell相当于应用程序的ȝ口;Composite相当?/span>SWING中的Panel对象Q是容纳lg的容器?/span>
2?/span>org.eclipse.swt.layout
主要的界面布局方式在此包中?/span>SWT对组件的布局也采用了AWT/SWING中的Layout?/span>Layout Datal合的方式?/span>
3?/span>org.eclipse.swt.custom
对一些基本图形组件的扩展在此包中Q比如其中的CLabel是Ҏ?/span>Labellg的扩展,?/span>CLabel上可以同时加入文字和囄。在此包中还有一个新的布局方式StackLayout?/span>
4?/span>org.eclipse.swt.event
SWT采用了和AWT/SWING一L事g模型Q在包中可以扑ֈ事g监听cd相应的事件对象。比如,鼠标事g监听?/font>MouseListenerQ?/span>MouseMoveListener{,及对应的事g对象MouseEvent?/span>
5?/span>org.eclipse.swt.graphics
此包中包含针对图片、光标、字体或l图API。比如,可通过Imagec调用系l中不同cd的图片文件?/span>
6?/span>org.eclipse.swt.ole.win32
对不同^収ͼSWT有一些针Ҏ的API。例如,?/span>Windowsq_Q可以通过此包很容易的调用OLElgQ这使得SWTE序也可以内?/span>IE览器或Word?/span>Excel{程序?/span>
此外q有org.eclipse.swt.dnd?/span>org.eclipse.swt.printing?/span>org.eclipse.swt.program?/span>org.eclipse.swt.accessibility?/span>org.eclipse.swt.browser?/span>org.eclipse.swt.awt{包Q在此不一一介绍了。这些包一般很用刎ͼ只需要稍微了解一下就行了Q不必深I?br />
?/strong>SWT Designer
SWT Designer是优U?/span>SWT/JFace开发辅助工?br />http://downloads.instantiations.com/Designer/release/v5.1.0_20060908125203/Designer_v5.1.0_win32_x86.exe
http://www.codefocus.cn/code/JAVA/SWT_Designer5.rar
codefocus.cn解压
SWT Designerq无法完成所有的界面设计工作Q所以在界面开发中依然是以手工写代码ؓ主,而且手写代码某些时候比界面拖拉操作更快捗以下是W者在使用SWT Designer开发界面时的基本流E:
l 新开一个时的Application文gQ用SWT Desiger快速做好开发所需要的部䆾界面?/span>
l 自动生成的代码UL到正式项目中Q进行手工修改和代码_?/span>
另外Q由?/span>SWT Designer不是很稳定,所以在使用时还应注意:
l 不要在界面中加入太多lg?/span>
l 不要频繁的移动组Ӟ或者删除又dlgQ否则很可能因ؓ内存耗尽而死机?/span>