- 浏览: 73082 次
- 性别:
- 来自: 上海
-
文章分类
最新评论
SWT备忘
1.SWT
SWT是由IBM所提出的,一个用于做用户界面的包。她与Sun的Swing具有很多的相似之处,因此如果掌握了Swing,那么要学习SWT将是非常简单的。SWT在Eclipse中得到了很大的使用,但是,在Eclipse当中更多情况下,我们使用的是对SWT再进行了一层封装的JFACE包。因此,如果想进行Eclipse的插件开发,我们需要先掌握SWT和JFACE。
2.从例子开始
a)代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test1 {
public static void main(String[] args) {
Display d = new Display();
Shell s = new Shell(d);
s.setText("Test");
Label l = new Label(s, SWT.NONE);
l.setText("Hello World");
l.pack();
s.pack();
s.open();
while (!s.isDisposed()) {
if (!d.readAndDispatch()) {
d.sleep();
}
}
d.dispose();
}
}
a)运行图:
b)说明:
从上述程序,我们可以大约的得到一些SWT与Swing不一样的地方:
1.当我们需要实例化一个控件时,我们需要在构造函数中提供父控件的引用。
2.通过构造函数,我们不需要进行显式的add()操作,来组织控件树。
3.我们需要手动的启动消息循环(while部分)。
4.程序结束的时候,我们需要手工的对资源进行释放。
3.控件:
a)Label:
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test1 {
public Test1() {
init();
}
private void init() {
…
Label b1 = new Label(s, SWT.NONE);
b1.setText("Label 1");
b1.setBackground(new Color(d, 0, 0, 255));
Label b2 = new Label(s, SWT.BORDER | SWT.CENTER);
b2.setText("Label 2");
Label b3 = new Label(s, SWT.WRAP);
b3.setText("Label 3");
Label b4 = new Label(s, SWT.SEPARATOR | SWT.HORIZONTAL);
…
}
public static void main(String[] args) {
Test1 t = new Test1();
}
}
ii.运行图:
iii.说明:
1.Label实例化的时候需要提供一个Style参数,从后面的例子可以看到,这个Style参数在SWT当中被广泛使用,通过Style参数的使用,我们可以比在Swing当中接触到更少的子类。
2.Label可以使用的Style参数有:BORDER,CENTER,LEFT,RIGHT,WRAP和SEPARATOR。BORDER用于为控件添加边框;CENTER,LEFT,RIGHT用于Label内容的对齐;WRAP用于当文本内容超出Label一行的最大长度时,进行自动换行。当使用SEPARATOR时,可以配合HORIZONTAL,VERTICAL,SHADOW_IN,SHADOW_OUT和SHADOW_NONE使用。
b)Text:
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test2 {
public Test2() {
init();
}
private void init() {
…
Text t1 = new Text(s, SWT.NONE);
/**
*相当于密码输入框
*/
Text t2 = new Text(s, SWT.BORDER);
t2.setEchoChar('*');
t2.setTextLimit(10); //限制最大输入字符数为10个
/**
*不能换行,相当于TextField
*/
Text t3 = new Text(s, SWT.SINGLE);
t3.setText("Hello World");
/**
*支持换行
*/
Text t4 = new Text(s, SWT.MULTI);
t4.setText("Hello World");
/**
*相当于TextArea
*/
Text t5 = new Text(s, SWT.H_SCROLL | SWT.V_SCROLL);
/**
*支持自动换行
*/
Text t6 = new Text(s, SWT.WRAP);
…
}
public static void main(String[] args) {
Test2 t = new Test2();
}
}
ii.运行图:
iii.说明:
1.Text可以使用的Style参数有:BORDER,H_SCROLL,V_SCROLL,MULTI,SINGLE,READ_ONLY,WRAP。BORDER用于添加边框;H_SCROLL和V_SCROLL用于提供滚动,当使用滚动时即表明Text可以添加多行内容;MULTI和SINGLE用于表示Text的内容时多行还是单行;READ_ONLY用于表示Text为止读。WRAP用于当文本内容超出Text一行的长度时,进行自动换行。
c)Button
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test3 {
public Test3() {
init();
}
private void init() {
…
/**
*普通按钮
*/
Button b1 = new Button(s, SWT.PUSH | SWT.LEFT);
b1.setText("Button 1");
/**
*单选按钮
*/
Button b2 = new Button(s, SWT.CHECK);
b2.setText("Button 2");
/**
* Radio按钮
*/
Button b3 = new Button(s, SWT.RADIO);
b3.setText("Button 3");
/**
*箭头按钮
*/
Button b4 = new Button(s, SWT.ARROW | SWT.BORDER);
b4.setText("Button 4");
/**
* Toggle按钮
*/
Button b5 = new Button(s, SWT.TOGGLE);
b5.setText("Button 5");
…
}
…
}
ii.运行图:
iii.说明:
1.Button可以使用的Style有:PUSH,CHECK,RADIO,TOGGLE,ARROW,FLAT, BORDER, LEFT, RIGHT和CENTER。其中,前5个用于改变按钮的类别;后5个用于改变按钮的外观。
2.由于SWT没有提供类似于Swing当中的ButtonGroup的概念,因此,我们需要以手工的方式来处理按钮间的互斥选择问题。
d)List
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test4 {
…
private void init() {
…
/**
*多选
*/
List l1 = new List(s, SWT.MULTI | SWT.H_SCROLL | SWT.BORDER);
l1.add("Item 1");
l1.add("Item 2");
l1.add("Item 3");
/**
*单选
*/
List l2 = new List(s, SWT.SINGLE | SWT.V_SCROLL | SWT.BORDER);
l2.setItems(new String[] { "Item 1", "Item 2", "Item 3" });
…
}
…
}
ii.运行图:
iii.说明:
1.List可以使用的Style有:BORDER,H_SCROLL,V_SCROLL,SINGLE和MULTI。SINGLE和MULTI用于表示单选和多选。
e)Combo
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test5 {
private Combo c2 = null;
public Test5() {
init();
}
private void init() {
…
/**
*没有编辑框
*/
Combo c1 = new Combo(s, SWT.DROP_DOWN | SWT.READ_ONLY);
c1.setItems(new String[] { "Item 1", "Item 2", "Item 3" });
Combo c2 = new Combo(s, SWT.SIMPLE | SWT.BORDER);
c2.setItems(new String[] { "Item 1", "Item 2", "Item 3" });
/**
*没有选项
*/
Combo c3 = new Combo(s, SWT.DROP_DOWN);
…
}
…
}
ii.运行图:
iii.说明:
1.Combo可以使用的Style有:BORDER,DROP_DOWN,READ_ONLY,SIMPLE。DROP_DOWN表示只提供下拉框;SIMPLE表示既有下拉框又有编辑框。
f)Composite
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test6 {
…
private void init() {
…
/**
* Composite就是一个容器,他类似于JPanel
*/
Composite c = new Composite(s, SWT.BORDER);
c.setBackground(new Color(d, 255, 0, 0));
Label l = new Label(c, SWT.BORDER);
l.setText("Hello World");
…
}
…
}
ii.运行图:
iii.说明:
1.Composite是一个容器,相当于Swing当中的JPanel。
2.Composite可以使用的Style有:BORDER,H_SCROLL和V_SCROLL。
g)Group
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test7 {
…
private void init() {
…
Group g1 = new Group(s, SWT.BORDER | SWT.SHADOW_ETCHED_IN);
g1.setText("Group 1");
g1.setBackground(new Color(d, 255, 0, 0));
Button b = new Button(g1, SWT.PUSH);
b.setText("Button");
…
}
…
}
ii.运行图:
iii.说明:
1.Group是Composite的一个子类,所以他也是一个容器,不过它与Composite的区别就是,她比Composite多加了一个框。
2.Group可以使用的Style有:BORDER,SHADOW_ETCHED_IN,SHADOW_ETCHED_OUT,SHADOW_IN,SHADOW_OUT和SHADOW_NONE。
4.事件监听
a)SelectionListener
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test1 {
…
private void init() {
…
Button b = new Button(s, SWT.PUSH);
b.setText("Button");
b.addSelectionListener(new SelectionAdapter() {
@Override public void widgetSelected(SelectionEvent e) {
System.out.println("Button was pressed");
}
});
…
}
…
}
ii.说明:
1.SelectionListener的作用与Swing当中的ActionListener同。
b)KeyListener
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test2 {
…
private void init() {
…
Text t = new Text(s, SWT.BORDER);
t.addKeyListener(new KeyAdapter() {
@Override public void keyPressed(KeyEvent e) {
if (e.character == 'a') {
System.out.println("a is forbidden");
//通过doit属性,可以禁止输入的字符
e.doit = false;
} else {
System.out.println("Pressed " + e.character);
}
}
});
…
}
…
}
ii.说明:
1.SWT没有为按键提供与Swing中类似的平台无关的VK码。
2.我们可以通过KeyEvent中的doit属性,来对输入框的内容进行约束。这是比Swing要方便的地方,如果我们想要在Swing当中完成相同的操作的话,可能需要获取TextField中对应的module对象,并进行操作。
c)MouseListener,MouseMoveListener,MouseTrackListener
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test3 {
…
private void init() {
…
Button b1 = new Button(s, SWT.PUSH | SWT.BORDER);
b1.setText("Button 1");
b1.addMouseListener(new MouseAdapter() {
@Override public void mouseDown(MouseEvent e) {
System.out.println("Pressed at (" + e.x + "," + e.y + ")");
}
});
Button b2 = new Button(s, SWT.PUSH | SWT.BORDER);
b2.setText("Button 2");
b2.addMouseMoveListener(new MouseMoveListener() {
public void mouseMove(MouseEvent e) {
System.out.println("Pressed at (" + e.x + "," + e.y + ")");
}
});
Button b3 = new Button(s, SWT.PUSH | SWT.BORDER);
b3.setText("Button 3");
b3.addMouseTrackListener(new MouseTrackAdapter() {
@Override public void mouseHover(MouseEvent e) {
System.out.println("Pressed at (" + e.x + "," + e.y + ")");
}
});
…
}
…
}
ii.说明:
1.SWT增加了MouseTrackerListener,用于监听鼠标进入,离开和在控件上停留的事件。
d)FocusListener
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test5 {
…
private void init() {
…
Button[] bs = new Button[3];
int i = 0;
for (Button b : bs) {
b = new Button(s, SWT.PUSH);
b.setText("Button " + i);
b.addFocusListener(new FocusAdapter() {
public void focusGained(FocusEvent e) {
System.out.println(e.getSource() + " Gains Focus");
}
});
b.addTraverseListener(new TraverseListener() {
public void keyTraversed(TraverseEvent e) {
if (e.detail == SWT.TRAVERSE_TAB_NEXT) {
System.out.println("Don't use Tab to Traverse.");
e.doit = false;
}
}
});
i++;
}
…
}
…
}
ii.说明:
1.FocusListener在控件获取到焦点之后得到通知。
2.TraverseListener在控件获得焦点之前得到通知,通过TraverseEvent的detail值可以得知控件是通过什么方式获得焦点,而通过doit值,可以限制是否让控件获取该焦点。
5.高级控件
a)Table:
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test1 {
private Table table = null;
…
private void init() {
…
table = new Table(s, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL
| SWT.V_SCROLL | SWT.FULL_SELECTION);
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableColumn name = new TableColumn(table, SWT.CENTER);
name.setText("Name");
name.setWidth(100);
TableColumn sex = new TableColumn(table, SWT.CENTER);
sex.setText("Sex");
sex.setWidth(50);
TableColumn age = new TableColumn(table, SWT.CENTER);
age.setText("Age");
age.setWidth(50);
TableItem i1 = new TableItem(table, SWT.NONE);
i1.setText(new String[] { "nick", "m", "24" });
TableItem i2 = new TableItem(table, SWT.NONE);
i2.setText(new String[] { "cen", "m", "24" });
table.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
TableItem ti = table.getSelection()[0];
for (int i = 0; i < 3; i++)
System.out.print(ti.getText(i) + "/t");
System.out.println();
}
});
…
}
…
}
ii.运行图:
iii.说明:
1.Table可以使用的Style值:BORDER,H_SCROLL,V_SCROLL,SINGLE,MULTI,CHECK,FULL_SELECTION和HIDE_SELECTION。其中SINGLE,MULTI用于支持单选和多选;CHECK用于为第一列增加一个CheckBox;FULL_SELECTION用于当选择某一列时,可以把该项所在的行全部选中。HIDE_SELECTION用于禁止表格的项被选中。
iv.结构图:
Shell |
Table |
TableColumn |
TableItem |
b)TabFolder
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test2 {
…
private void init() {
…
TabFolder tf = new TabFolder(s, SWT.BORDER);
Composite c1 = new Composite(tf, SWT.BORDER);
c1.setLayout(new RowLayout());
Label b1 = new Label(c1, SWT.BORDER);
b1.setText("Label 1");
Composite c2 = new Composite(tf, SWT.BORDER);
c2.setLayout(new RowLayout());
Label b2 = new Label(c2, SWT.BORDER);
b2.setText("Label 2");
TabItem page1 = new TabItem(tf, SWT.NONE);
page1.setText("Page 1");
page1.setControl(c1);
TabItem page2 = new TabItem(tf, SWT.NONE);
page2.setText("Page 2");
page2.setControl(c2);
…
}
…
}
ii.运行图:
iii.说明:
1.Tab可以使用的Style有:BORDER。
iv.结构图:
control |
Shell |
TabFolder |
TabItem |
Control |
c)Slider,Scale和ProgressBar
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test3 {
private Slider slider = null;
private Scale scale = null;
private ProgressBar pb = null;
…
private void init() {
…
slider = new Slider(s, SWT.HORIZONTAL);
slider.setMinimum(0);
slider.setMaximum(100);
slider.addSelectionListener(new SelectionAdapter() {
@Override public void widgetSelected(SelectionEvent e) {
System.out.println("slider is:"+ slider.getSelection());
}
});
scale = new Scale(s, SWT.HORIZONTAL);
scale.setMinimum(0);
scale.setMaximum(100);
scale.addSelectionListener(new SelectionAdapter() {
@Override public void widgetSelected(SelectionEvent e) {
System.out.println("scale is:"+ scale.getSelection());
}
});
pb = new ProgressBar(s, SWT.HORIZONTAL | SWT.SMOOTH);
pb.setMinimum(0);
pb.setMaximum(100);
pb.setSelection(75);
…
}
…
}
ii.运行图:
iii.说明:
1.Slider,Scale,ProgressBar可以使用的Style有BORDER,HORIZONTAL和VERTICAL。
d)菜单:
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test4 {
…
private void init() {
…
Menu bar = new Menu(s, SWT.BAR);
s.setMenuBar(bar);
MenuItem fMenu = new MenuItem(bar, SWT.CASCADE);
fMenu.setText("File");
Menu fileMenu = new Menu(s, SWT.DROP_DOWN);
fMenu.setMenu(fileMenu);
MenuItem miOpen = new MenuItem(fileMenu, SWT.PUSH);
miOpen.setText("&Open/tCtrl+o");
miOpen.setAccelerator(SWT.CTRL + 'o');
MenuItem miClose = new MenuItem(fileMenu, SWT.PUSH);
miClose.setText("&Close");
MenuItem eMenu = new MenuItem(bar, SWT.CASCADE);
eMenu.setText("Edit");
Menu editMenu = new Menu(s, SWT.DROP_DOWN);
eMenu.setMenu(editMenu);
MenuItem miCopy = new MenuItem(editMenu, SWT.CHECK);
miCopy.setText("&Copy");
MenuItem miPaste = new MenuItem(editMenu, SWT.RADIO);
miPaste.setText("&Paste");
miOpen.addSelectionListener(new SelectionAdapter() {
@Override public void widgetSelected(SelectionEvent e) {
System.out.println("Open Selected");
}
});
Button b = new Button(s, SWT.PUSH);
b.setText("Button");
/**
*弹出式菜单
* */
Menu mPopup = new Menu(s, SWT.POP_UP);
MenuItem miFile = new MenuItem(mPopup, SWT.CASCADE);
miFile.setText("File");
Menu pfileMenu = new Menu(s, SWT.DROP_DOWN);
miFile.setMenu(pfileMenu);
MenuItem pmiOpen = new MenuItem(pfileMenu, SWT.PUSH);
pmiOpen.setText("Open");
pmiOpen.addSelectionListener(new SelectionAdapter() {
@Override public void widgetSelected(SelectionEvent e) {
System.out.println("Open Selected");
}
});
MenuItem pmiCopy = new MenuItem(mPopup, SWT.PUSH);
pmiCopy.setText("Copy");
b.setMenu(mPopup);
…
}
…
}
ii.运行图:
iii.说明:
1.与菜单相关的类只有Menu和MenuItem。而为了组成整个菜单栏,我们需要通过不同的Style来标识不同的控件。
2.当Menu的Style为Bar时,表示这个Menu是个MenuBar。
3.如果需要新建一个菜单,我们需要:
MenuItem fMenu = new MenuItem(bar, SWT.CASCADE);
fMenu.setText("File");
Menu fileMenu = new Menu(s, SWT.DROP_DOWN);
fMenu.setMenu(fileMenu);
其中,前两行是为MenuBar添加了一个Style为CASCADE的MenuItem。第三行是新建一个菜单,他的Style为DROP_DOWN,表示为一个下来菜单。然后第4行,是把菜单项和这个菜单关联起来,这于待会提到的上下文菜单类似,即把fileMenu看作是fMenu的弹出菜单。
4.如果需要建立一个弹出式菜单,我们需要新建一个Style为POP_UP的菜单,他的作用与2中提到的MenuBar类似,后续的工作都是基于这个新建的POP_UP菜单继续的。
5.MenuItem可以使用的Style有:PUSH,CHECK,RADIO,SEPARATOR,CASCADE。
iv.结构图:
Shell |
Menu |
MenuItem |
e)树:
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test5 {
private Tree tree = null;
…
private void init() {
…
tree = new Tree(s, SWT.SINGLE | SWT.BORDER | SWT.CHECK);
tree.setSize(300, 300);
TreeItem tiC = new TreeItem(tree, SWT.NONE);
tiC.setText("C");
TreeItem tiD = new TreeItem(tree, SWT.NONE);
tiD.setText("D");
TreeItem tiPro = new TreeItem(tiC, SWT.NONE);
tiPro.setText("Program File");
TreeItem tiJava = new TreeItem(tiD, SWT.NONE);
tiJava.setText("Java");
tree.addSelectionListener(new SelectionAdapter() {
@Override public void widgetSelected(SelectionEvent e) {
TreeItem[] tis = tree.getSelection();
for (TreeItem ti : tis) {
System.out.println(ti.getText() + " was selected "
+ ti.getChecked());
}
}
});
…
}
…
}
ii.运行图:
iii.说明:
1.Tree可以使用的Style有:MULTI,SINGLE和CHECK。其中MULTI和SINGLE表示单选和多选;CHECK是为每个树节点添加复选框。
iv.结构图:
Shell |
Tree |
TreeItem |
f)ToolBar:
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test6 {
…
private void init() {
…
ToolBar tb = new ToolBar(s, SWT.BORDER | SWT.HORIZONTAL);
ToolItem tiOpen = new ToolItem(tb, SWT.PUSH);
tiOpen.setText("Open");
ToolItem tiClose = new ToolItem(tb, SWT.PUSH);
tiClose.setText("Close");
Group g = new Group(s, SWT.BORDER);
g.setText("Group");
…
}
…
}
ii.运行图:
iii.说明:
iv.结构图:
Shell |
ToolBar |
ToolItem |
g)CoolBar:
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test7 {
…
private void init() {
…
CoolBar cb = new CoolBar(s, SWT.BORDER);
cb.setLayout(new RowLayout());
CoolItem ci1 = new CoolItem(cb, SWT.BORDER);
CoolItem ci2 = new CoolItem(cb, SWT.BORDER);
Button b = new Button(cb, SWT.PUSH);
b.setText("Button");
ToolBar tb = new ToolBar(cb, SWT.BORDER | SWT.HORIZONTAL);
ToolItem tiOpen = new ToolItem(tb, SWT.PUSH);
tiOpen.setText("Open");
ToolItem tiClose = new ToolItem(tb, SWT.CHECK);
tiClose.setText("Close");
ci1.setControl(b);
ci2.setControl(tb);
…
}
…
}
ii.运行图:
iii.说明:
iv.结构图:
control |
Shell |
CoolBar |
CoolItem |
Control |
h)消息框
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test9 {
…
private void init() {
…
MessageBox box = new MessageBox(s, SWT.ICON_QUESTION | SWT.YES | SWT.NO);
box.setMessage("Are you a student?");
box.setText("Question");
int res = box.open();
switch (res) {
case SWT.YES:System.out.println("Select Yes");
break;
case SWT.NO:System.out.println("Select No");
break;
}
ColorDialog cd = new ColorDialog(s);
cd.setText("Selected Color");
cd.setRGB(new RGB(255, 0, 0));
RGB rgb = cd.open();
System.out.println("Select color is " + rgb);
DirectoryDialog dd = new DirectoryDialog(s);
dd.setText("Selected Dir");
dd.setFilterPath("D:/");
String path = dd.open();
System.out.println("Select path is " + path);
FileDialog fd = new FileDialog(s, SWT.OPEN);
fd.setText("Select File");
fd.setFilterPath("D:/");
fd.setFileName("*.java");
String file = fd.open();
System.out.println("Select path is " + file);
FontDialog fod = new FontDialog(s);
FontData fontd = new FontData("新宋体", 9, SWT.NONE);
fod.setText("Select Font");
fod.setFontList(new FontData[] { fontd });
fod.setRGB(new RGB(0, 0, 0));
FontData font = fod.open();
System.out.println("Select font is " + font);
PrintDialog pd = new PrintDialog(s);
PrinterData pdata = pd.open();
System.out.println("Print data is " + pdata);
…
}
…
}
ii.运行图:
MessageBox
ColorDialog
DirectoryDialog
FileDialog
FontDialog
PrintDialog
iii.说明:
iv.结构图:
6.绘图:
a)代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test8 {
private Canvas canvas = null;
…
private void init() {
…
canvas = new Canvas(s, SWT.BORDER);
canvas.setSize(200, 200);
s.pack();
s.open();
GC graphic = new GC(canvas);
paint(graphic, d);
graphic.dispose();
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
paint(e.gc, e.display);
}
});
…
}
private void paint(GC g, Display d) {
Color red = d.getSystemColor(SWT.COLOR_RED);
Font f = new Font(d, "新宋体", 9, SWT.NONE);
Image i = new Image(d, "11.jpg");
g.setForeground(red);
g.setFont(f);
g.drawRectangle(0, 0, 80, 80);
g.drawText("Hello World", 20, 20);
g.drawImage(i, 0, 0, i.getBounds().width, i.getBounds().height, 30, 40,40,
40);
i.dispose();
f.dispose();
}
…
}
b)运行图:
c)说明:
i.SWT提供一个叫做GC(GraphicContext)的东西用于绘图,每个控件都可以属于他自己的GC。
ii.在SWT中,字体,颜色,图片都是重量对象,因此使用完以后,应该进行显式的dispose()操作。
iii.由于,我们不能像Swing当中那样,通过子类化的方法,对绘图方法进行重载,因此我们需要通过事件处理的方式进行图像的重绘。
7.布局
a)FillLayout
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test1 {
…
private void init() {
Display d = new Display();
Shell s = new Shell();
s.setText("FillLayout");
s.setSize(200, 200);
s.setLayout(new FillLayout());
Button[] bs = new Button[4];
for (int i = 0; i < bs.length; i++) {
bs[i] = new Button(s, SWT.PUSH | SWT.BORDER);
bs[i].setText("Button " + i);
}
s.pack();
s.open();
while (!s.isDisposed()) {
if (!d.readAndDispatch()) {
d.sleep();
}
}
d.dispose();
}
public static void main(String[] args) {
Test1 t = new Test1();
}
}
ii.运行图:
iii.说明:
1.FillLayout的作用与Swing当中的FlowLayout相似。
b)RowLayout
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test2 {
…
private void init() {
…
RowLayout layout = new RowLayout();
layout.wrap = true;
s.setLayout(layout);
Button[] bs = new Button[4];
for (int i = 0; i < bs.length; i++) {
bs[i] = new Button(s, SWT.PUSH | SWT.BORDER);
bs[i].setText("Button " + i);
}
…
}
…
}
ii.运行图:
iii.说明:
1.RowLayout通过wrap属性,可以使得当一行不能容下所有控件时,自动把控件下移到下一行。
c)GridLayout
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test3 {
…
private void init() {
…
GridLayout layout = new GridLayout();
layout.numColumns = 2;
s.setLayout(layout);
Button[] bs = new Button[4];
for (int i = 0; i < bs.length; i++) {
bs[i] = new Button(s, SWT.PUSH | SWT.BORDER);
bs[i].setText("Button " + i);
}
…
}
…
}
ii.运行图:
iii.说明:
1.GridLayout的使用与Swing中的GridLayout类似。
d)FormLayout
i.说明:太复杂了,不管。
8.其他有趣功能
a)使用系统托盘(Tray)
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test1 {
private Menu mPop = null;
…
private void init() {
Display d = new Display();
Shell s = new Shell();
Tray tray = d.getSystemTray();
TrayItem ti = new TrayItem(tray, SWT.NONE);
ti.setToolTipText("My Tray");
Image i = new Image(d, "11.jpg");
ti.setImage(i);
i.dispose();
mPop = new Menu(s, SWT.POP_UP);
MenuItem miOpen = new MenuItem(mPop, SWT.NONE);
iOpen.setText("Open");
ti.addListener(SWT.MenuDetect, new Listener() {
public void handleEvent(Event e) {
mPop.setVisible(true);
}
});
ti.addSelectionListener(new SelectionAdapter() {
@Override public void widgetSelected(SelectionEvent e) {
System.out.println("Selected My Tray");
}
});
…
}
…
}
ii.运行图:
iii.说明:
b)浏览器
i.代码:
/**
* @authorcenyongh@mails.gscas.ac.cn
*/
public class Test4 {
private Browser b = null;
private Text t = null;
…
private void init() {
…
Composite c = new Composite(s, SWT.NONE);
c.setLayout(new GridLayout(2, false));
GridData data2 = new GridData();
data2.widthHint = 60;
Label l = new Label(c, SWT.NONE);
l.setText("Address:");
l.setLayoutData(data2);
data2 = new GridData(GridData.FILL_HORIZONTAL);
t = new Text(c, SWT.BORDER);
t.setLayoutData(data2);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
c.setLayoutData(data);
data = new GridData(GridData.FILL_BOTH);
b = new Browser(s, SWT.BORDER);
b.setLayoutData(data);
t.addKeyListener(new KeyAdapter() {
@Override public void keyPressed(KeyEvent e) {
if (e.character == SWT.CR) {
String url = t.getText();
System.out.println(url);
b.setUrl(url);
}
}
});
…
}
…
}
ii.运行图:
iii.说明:
相关推荐
标题“swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位”表明这个压缩包包含了适用于64位Windows操作系统的SWT库。描述中提到的“64位windows操作系统使用的SWT库”进一步确认了这一点。 SWT的设计目标是...
SWT(Standard Widget Toolkit)是Eclipse项目的一个重要组成部分,它提供了一套用于构建图形用户界面(GUI)的API,与Java Swing不同,SWT基于操作系统原生的UI组件,因此能够实现更好的性能和与操作系统的集成。...
### SWT配置详解 #### 一、SWT简介与配置的重要性 SWT(Standard Widget Toolkit)是一种用于构建基于Java的应用程序的图形用户界面工具包。它提供了丰富的控件集,并能够生成本地外观和感觉的界面,这使得应用在...
【标题】"swt-api swt DOC" 指的是一个关于SWT(Standard Widget Toolkit)API的文档,主要用于Java GUI(图形用户界面)开发。这个文档可能是开发者们在使用SWT进行界面设计时的重要参考资料。 【描述】"java界面...
在本文中,我们将深入探讨SWT(Standard Widget Toolkit)的应用,以及如何在Java应用程序中使用它。SWT是由IBM公司为Eclipse集成开发环境设计的一种图形用户界面(GUI)工具包,它通过JNI(Java Native Interface)...
下载编译的SWT库,版本号4.911,包含多个版本: org.eclipse.swt.cocoa.macosx.x86_64 org.eclipse.swt.gtk.linux.aarch64 org.eclipse.swt.gtk.linux.arm org.eclipse.swt.gtk.linux.ppc64le org.eclipse.swt.gtk....
### SWT JFace 按键、事件、监听 #### 概述 SWT(Standard Widget Toolkit)是Eclipse平台下的图形界面开发工具包,而JFace则是基于SWT之上的高级用户界面工具集。SWT提供了低级别的组件,用于创建跨平台的图形...
SWT(Standard Widget Toolkit)是Java编程环境中一个用于创建图形用户界面(GUI)的开源库。它是Eclipse项目的一部分,旨在提供与操作系统更紧密的集成,使得开发者可以创建原生外观的应用程序。SWT提供了丰富的...
根据提供的文件信息,可以看出本文主要讨论的是如何在 SWT (Standard Widget Toolkit) 的 Table 控件中实现文本换行的功能。SWT 是一个用于开发基于 Java 的桌面应用程序的工具包,它提供了丰富的用户界面组件来帮助...
swt.jar swt.jar swt.jar swt.jar swt.jar
org.eclipse.swt.SWT.class org.eclipse.swt.SWTError.class org.eclipse.swt.SWTException.class org.eclipse.swt.accessibility.ACC.class org.eclipse.swt.accessibility.Accessible.class org.eclipse.swt....
SWT(Standard Widget Toolkit)是Eclipse开源项目中的一部分,主要用于构建GUI(图形用户界面)应用程序。它提供了一组与操作系统紧密集成的图形控件,允许开发者创建原生外观的应用程序。SWT的设计目标是提高性能...
SWT (Standard Widget Toolkit) 是一个开放源代码的Java库,用于在各种操作系统上创建图形用户界面(GUI)。它是Eclipse项目的一部分,提供了一种替代Java标准库AWT和Swing的方式,允许开发者构建与本机系统更加紧密...
SWT(Standard Widget Toolkit)是Java编程中用于创建图形用户界面(GUI)的一种库,它为开发者提供了丰富的控件和对话框。在SWT中,`MessageBox`是一个用于显示简单的消息对话框的类,通常用来向用户显示警告、确认...
Java平台上的图形用户界面(GUI)开发通常依赖于各种库和框架,DJNativeSwing和SWT(Standard Widget Toolkit)是其中两个重要的组件。本文将详细介绍这三个提及的JAR文件以及它们在Java应用中的作用。 首先,...
Java SWT(Standard Widget Toolkit)是Java平台上用于创建桌面应用程序的一个库,它提供了丰富的用户界面元素,如按钮、文本框、列表等。SWT是Eclipse IDE的基础,它通过与操作系统直接交互来提供本地化的图形用户...
根据给定的信息,本文将详细介绍SWT(Standard Widget Toolkit)的相关知识点,包括其背景、特点、与AWT/Swing的对比以及如何开始使用SWT。 ### SWT简介 SWT(Standard Widget Toolkit)是一个开放源码的原生GUI...
在标题提到的"swt源码和jar包dj-native-swing-swt.jar"中,"dj-native-swing-swt.jar"是一个特殊的库,它结合了SWT和JNativeSwing,允许在Java Swing应用中嵌入SWT组件。这使得开发者可以在同一应用程序中同时使用...
SWT官方api文档 开发基于swt的GUI程序必备手册
SWT(Standard Widget Toolkit)是Java编程环境中用于创建图形用户界面(GUI)的一种开源库,它是Eclipse项目的一部分。SWT提供了与操作系统本机UI组件的直接交互,从而能够创建性能高效、外观与操作系统的原生应用...