JAVA笔记--初探SWT-1

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.graphics.*;



public class HelloSWT {

	public static void main(String[] args) {
		// TODO Auto-generated constructor stub
		Display display = new Display();//创建一个diaplay对象
		Shell shell = new Shell(display);//shell是程序的主窗体
		shell.setLayout(null);//设置shell的布局方式
		Text hello = new Text(shell ,SWT.MULTI);//声明一个可以显示多行信息的文本框
		shell.setText("Java program");//设置主窗体的标题
		shell.setSize(200,100);//设置主窗体的大小
		Color color = new Color(Display.getCurrent(),255,255,255);
		//声明颜色对象
		shell.setBackground(color);//设置窗体的背景颜色
		hello.setText("Hello, SWT World!\n\n你好");//设置文本框信息
		hello.pack();//自动调整文本框的大小
		shell.open();//打开主窗体
		while(!shell.isDisposed()){
			if(!display.readAndDispatch()){
				display.sleep();
			}
		}
		display.dispose();
	}

}

这里构建的是第一个小程序。

分析本例的源代码,可以看到,创建一个典型的SWT应用程序需要以下步骤:

  1. 创建一个Display

  2. 创建一个或多个shell

  3. 设置shell的布局

  4. 创建shell中的组件

  5. 用open()方法打开shell窗体

  6. 写一个事件转发机制

  7. 销毁display


SWT中常用的包:

  1. org.eclipse.swt.widgets

    Button Text Label Combo Shell(主窗体) Composite(容纳组件的容器)

  2. org.eclipse.swt.layout

  3. org.eclipse.swt.custom

    基本图形组件的扩展 如CLabel是对Label的扩展 新的布局方式StackLayout

  4. org.eclipse.swt.event

    事件监听类 相应的事件对象 如MouseListener MouseEvent

  5. org.eclipse.swt.graphics

    针对图片 光标 字体或绘图API

  6. org.eclipse.swt.ole.win32

    用来调用OLE组件 使得SWT程序可以内嵌IE浏览器或者Word Excel程序


Button组件

构造方法:Button(Composite parent, int style)

Composite是shell的父类 style规定button的样式

常用样式style:

SWT.PUSH

SWT.CHECK

SWT.RADIO

SWT.ARROW

SWT.CENTER  文字居中

SWT.LEFT  文字靠左

SWT.RIGHT  文字靠右

SWT.BORDER  深陷型按钮

SWT.FLAT  平面型按钮

可以指定多个样式 用'|'相连

常用方法 setText()  setBounds()


Label组件

构造方法和Button类似

Label(Composite parent, int style)

SWT.WRAP  自动换行

SWT.SEPARARATOR  分栏符,默认竖线分栏

SWT.HORIZONTAL  横线分栏符

Label lb1 = new Label(shell,SWT.BORDER|SWT.RIGHT);
		lb1.setBounds(10,10,70,30);
		lb1.setText("标签1");
		lb1.setFont(new Font(display,"黑体",14,SWT.BOLD));
		lb1.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
		
		Label lb2 = new Label(shell,SWT.CENTER);
		lb2.setBounds(90,10,70,30);
		lb2.setText("标签2");
		lb2.setFont(new Font(display,"宋体",14,SWT.NORMAL));
		
		Label lb3 = new Label(shell, SWT.SEPARATOR|SWT.BORDER);
		lb3.setBounds(10,50,70,30);
		
		Label lb4 = new Label(shell,SWT.SEPARATOR|SWT.HORIZONTAL|SWT.BORDER);
		lb4.setBounds(90,50,70,30);


Text组件

SWT.MULTI  可以输入多行 回车换行

SWT.WRAP  可以输入多行 行尾自动换行

SWT.PASSWORD  密码型 输入字符显示为*

SWT.V_SCROLL  带垂直滚动条

SWT.H_SCROLL  带水平滚动条

Text text4 = new Text(shell,SWT.WRAP|SWT.V_SCROLL);
		text4.setBounds(90,50,70,70);


下拉框Combo组件

style

SWT.NONE 默认式样

SWT.READ_ONLY  只读

SWT.SIMPLE  无需单击下拉框 列表会一直显示

Combo常用方法

add(String string) 在Combo中增加一项

add(String string, int index) 在Combo中第index项后插入一项

deselectAll()  使Combo中所有选项置空

removeAll()  将Combo中所有选项清空

setItems(String[] items)  将数组中的各项依次加入Combo中

select(int index)  将Combo的第index+1项置为当前选项

bt1.addSelectionListener(new SelectionAdapter(){
			public void widgetSelected(SelectionEvent e){
				combo.removeAll();
				Scanner input = new Scanner(System.in);
				for(int i=1;i<=3;i++){
					String string = input.nextLine();
					combo.add(string);
				}
				input.close();
				combo.select(0);
			}
		});
		
Button bt2 = new Button(shell,SWT.NONE);
bt2.setBounds(130,60,100,25);
bt2.setText("取值");
bt2.addSelectionListener(new SelectionAdapter(){
        public void widgetSelected(SelectionEvent e){
		lb.setText("你选择的是"+combo.getText());
	}
});

上面addSelectionListener方法看起来很特殊传入的参数是一大串 还定义了一个函数


List列表框组件

SWT.MULTI  允许复选

SWT.SINGLE  允许单选

(Combo只允许选择一项,List没有getText()方法,List的取值是用getSelection()方法,返回一个所有选项组成的String数组)

代码以及运行效果和Combo类似


菜单Menu类 Menu是菜单栏 同时也是一个容器 可以容纳菜单项(MenuItem)

  1. Menu的式样

SWT.BAR  菜单栏 用于主菜单

SWT.DROP_DOWN  下拉菜单  用于子菜单

SWT.POP_UP  鼠标右键弹出式菜单


2. MenuItem的式样

SWT.CASCADE  有子菜单的菜单项

SWT.CHECK  选中后前面显示一个小勾

SWT.PUSH  普通型菜单

SWT.RADIO  选中后前面有一个圆点

SWT.SEPARATOR  分隔符


3. 建立菜单的一般步骤

1)首先建立一个菜单栏 需要使用SWT.BAR属性

Menu mainmenu = new Menu(shell,SWT.BAR);

2)在窗体中指定需要显示的菜单栏

shell.setMenuBar(mainMenu);

3)创建顶级菜单栏 需要使用SWT.CASCADE属性

MenuItem fileItem = new MenuItem(mainMenu,SWT.CASCADE);
fileItem.setText("文件&F");

4)创建与顶级菜单项相关的下拉式菜单

Menu fileMenu = new Menu(shell,SWT.DROP_DOWN);

5)将顶级菜单与下拉菜单相关

fileItem.setMenu(fileMenu);

二级菜单的创建只需重复以上步骤3)-- 5)

本菜单中创建所有menu对象的第一个参数是shell

创建MenuItem对象的第一个参数是该MenuItem所在的Menu对象

如果某Menu是某MenuItem的子菜单 还要建立关联MenuItem.setMenu(Menu)

下面的代码比之前的复杂

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.events.*;

public class HelloSWT {
	private static Label lb;
	
	public static void main(String[] args) {
		Display display = new Display();
		final Shell shell = new Shell(display);
		shell.setText("菜单示例");
		
		Menu mainMenu = new Menu(shell,SWT.BAR);
		shell.setMenuBar(mainMenu);
		
		MenuItem fileItem = new MenuItem(mainMenu,SWT.CASCADE);
		fileItem.setText("文件&F");
		
		Menu fileMenu = new Menu(shell,SWT.DROP_DOWN);
		fileItem.setMenu(fileMenu);{
			MenuItem newFileItem = new MenuItem(fileMenu,SWT.CASCADE);
			newFileItem.setText("新建&N");
			
			Menu newFileMenu = new Menu(shell,SWT.DROP_DOWN);
			newFileItem.setMenu(newFileMenu);
			{
				MenuItem newProjectItem = new MenuItem(newFileMenu,SWT.PUSH);
				newProjectItem.setText("项目\tCtrl+Shift+N");
				newProjectItem.setAccelerator(SWT.CTRL+SWT.SHIFT+'N');
				newProjectItem.addSelectionListener(new SelectionAdapter(){
					public void widgetSelected(SelectionEvent e){
						Text text = new Text(shell,SWT.MULTI|SWT.BORDER|SWT.WRAP);
						text.setBounds(10,10,100,30);
						text.setText("你选择了“新建项目”");
					}
				});
				new MenuItem(newFileMenu,SWT.SEPARATOR);
				new MenuItem(newFileMenu,SWT.PUSH).setText("包");
				new MenuItem(newFileMenu,SWT.PUSH).setText("类");
			}
			MenuItem openFileItem = new MenuItem(fileMenu,SWT.CASCADE);
			openFileItem.setText("打开&O");
			MenuItem exitItem = new MenuItem(fileMenu,SWT.CASCADE);
			exitItem.setText("退出&E");
		}
		
		MenuItem helpItem = new MenuItem(mainMenu,SWT.CASCADE);
		helpItem.setText("帮助&H");
		
		shell.pack();
		shell.open();
		while(!shell.isDisposed()){
			if(!display.readAndDispatch()){
				display.sleep();
			}
		}
		display.dispose();
	}
}















你可能感兴趣的:(display,文本框,import,public,hello)