各位师兄:
大家好,本人第一次用SWT来开发JAVA的可视化程序,写了一个小小程序。
package testpack;import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;import org.eclipse.swt.widgets.Tree;public class test { private Tree tree;
private Table table;
protected Shell shell; /**
* Launch the application
* @param args
*/
public static void main(String[] args) {
try {
test window = new test();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* Open the window
*/
public void open() {
final Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
} /**
* Create contents of the window
*/
protected void createContents() {
shell = new Shell();
final GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
shell.setLayout(gridLayout);
shell.setSize(500, 375);
shell.setText("SWT Application"); //放置一个Table
table = new Table(shell, SWT.BORDER);
table.setLinesVisible(true);
table.setHeaderVisible(true);
final GridData gridData_2 = new GridData(SWT.FILL, SWT.TOP, true, true, 1, 2);
gridData_2.widthHint = 197;
gridData_2.heightHint = 310;
table.setLayoutData(gridData_2); final GridData gridData = new GridData(SWT.CENTER, SWT.CENTER, false, false);
gridData.heightHint = 36;
gridData.widthHint = 115;
button.setLayoutData(gridData);
button.setText("测试表");
//放置一个Tree
tree = new Tree(shell, SWT.BORDER);
tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
final Button button_1 = new Button(shell, SWT.NONE);
final GridData gridData_1 = new GridData(SWT.CENTER, SWT.CENTER, false, false);
gridData_1.heightHint = 34;
gridData_1.widthHint = 119;
button_1.setLayoutData(gridData_1);
button_1.setText("测试树型菜单");
//
}}
要求:
点击[测试表]按钮的时候,可以对表写入数据,包括列信息和行记录。举例我希望显示出如下内容:
姓名 年龄 性别 地区
陈列 21 男 五区
林业 23 女 六区
如果能有读取数据库表的例子就更好了。 点击[测试树型菜单]按钮的时候,可以显示树型菜单数据,类似如下:
单位树(根结点)
级别1---交通厅
社保厅
级别2---交管局
协查部应该完成呢?
以前用的控件是swing的(相对应的就是JTable\JTree),这些内容都会做,但现在项目需要用swt的控件,一点也不熟,
以前JTable\JTree里的那些方法都没有,所以很头疼。希望各位赐教,能详细点就更好了,再次声明分不是问题,若能写出
详细可用例子者,必另开贴赠分,谢谢。
大家好,本人第一次用SWT来开发JAVA的可视化程序,写了一个小小程序。
package testpack;import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;import org.eclipse.swt.widgets.Tree;public class test { private Tree tree;
private Table table;
protected Shell shell; /**
* Launch the application
* @param args
*/
public static void main(String[] args) {
try {
test window = new test();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* Open the window
*/
public void open() {
final Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
} /**
* Create contents of the window
*/
protected void createContents() {
shell = new Shell();
final GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
shell.setLayout(gridLayout);
shell.setSize(500, 375);
shell.setText("SWT Application"); //放置一个Table
table = new Table(shell, SWT.BORDER);
table.setLinesVisible(true);
table.setHeaderVisible(true);
final GridData gridData_2 = new GridData(SWT.FILL, SWT.TOP, true, true, 1, 2);
gridData_2.widthHint = 197;
gridData_2.heightHint = 310;
table.setLayoutData(gridData_2); final GridData gridData = new GridData(SWT.CENTER, SWT.CENTER, false, false);
gridData.heightHint = 36;
gridData.widthHint = 115;
button.setLayoutData(gridData);
button.setText("测试表");
//放置一个Tree
tree = new Tree(shell, SWT.BORDER);
tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
final Button button_1 = new Button(shell, SWT.NONE);
final GridData gridData_1 = new GridData(SWT.CENTER, SWT.CENTER, false, false);
gridData_1.heightHint = 34;
gridData_1.widthHint = 119;
button_1.setLayoutData(gridData_1);
button_1.setText("测试树型菜单");
//
}}
要求:
点击[测试表]按钮的时候,可以对表写入数据,包括列信息和行记录。举例我希望显示出如下内容:
姓名 年龄 性别 地区
陈列 21 男 五区
林业 23 女 六区
如果能有读取数据库表的例子就更好了。 点击[测试树型菜单]按钮的时候,可以显示树型菜单数据,类似如下:
单位树(根结点)
级别1---交通厅
社保厅
级别2---交管局
协查部应该完成呢?
以前用的控件是swing的(相对应的就是JTable\JTree),这些内容都会做,但现在项目需要用swt的控件,一点也不熟,
以前JTable\JTree里的那些方法都没有,所以很头疼。希望各位赐教,能详细点就更好了,再次声明分不是问题,若能写出
详细可用例子者,必另开贴赠分,谢谢。
package org.bill;import java.util.List;import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
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.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;public class MainDlg
{
private TableViewer tv;
final private Shell shell = new Shell(); /**
* Launch the application
* @param args
*/
public static void main(String[] args) {
try {
MainDlg window = new MainDlg();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* Open the window
*/
public void open() {
final Display display = Display.getDefault();
//final Shell shell = new Shell(); shell.setLayout(new GridLayout());
shell.setSize(500, 375);
shell.setText("家庭理财");
//
createTableViewer(shell);
addListener();
shell.open(); final Menu menu = new Menu(shell, SWT.BAR);
shell.setMenuBar(menu); final MenuItem menuItem = new MenuItem(menu, SWT.NONE);
menuItem.setText("文件"); final MenuItem menuItem_1 = new MenuItem(menu, SWT.NONE);
menuItem_1.setText("编辑"); final MenuItem menuItem_2 = new MenuItem(menu, SWT.NONE);
menuItem_2.setText("视图"); final Button button = new Button(shell, SWT.NONE);
button.setText("button"); tv.setSorter(new Sorter());
tv.setLabelProvider(new TableLabelProvider());
tv.setContentProvider(new ContentProvider());
tv.setInput((new AccountBookIMPL("xml/AccountBook.xml")).getAllAccounts());
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
private void createTableViewer(Composite parent)
{
/*
* 定义一个TableViewer对象
*/
tv=new TableViewer(parent,SWT.MULTI|SWT.BORDER|SWT.FULL_SELECTION);
/*
* 通过TableViewer中的Table对其布局
*/
Table table=tv.getTable();
table.setLayoutData(new GridData(347, 161));
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableLayout tLayout=new TableLayout();
table.setLayout(tLayout);
/*
* 建立TableViewer中的列
*/
tLayout.addColumnData(new ColumnWeightData(10));
new TableColumn(table,SWT.NONE).setText("序号");
tLayout.addColumnData(new ColumnWeightData(10));
new TableColumn(table,SWT.NONE).setText("日期");
tLayout.addColumnData(new ColumnWeightData(10));
new TableColumn(table,SWT.NONE).setText("用途");
tLayout.addColumnData(new ColumnWeightData(10));
new TableColumn(table,SWT.NONE).setText("金额");
tLayout.addColumnData(new ColumnWeightData(10));
new TableColumn(table,SWT.NONE).setText("记录人");
tLayout.addColumnData(new ColumnWeightData(10));
new TableColumn(table,SWT.NONE).setText("记录日期");
}
class Sorter extends ViewerSorter {
public int compare(Viewer viewer, Object e1, Object e2) {
Object item1 = e1;
Object item2 = e2;
return 0;
}
}
class TableLabelProvider extends LabelProvider implements ITableLabelProvider
{
public String getColumnText(Object element, int columnIndex)
{
Account account=(Account)element;
if(columnIndex==0)
{
return account.getId().toString();
}
if(columnIndex==1)
{
return account.getDate().toString();
}
if(columnIndex==2)
{
return account.getUseWhere().toString();
}
if(columnIndex==3)
{
return (new Integer(account.getNumber())).toString();
}
if(columnIndex==4)
{
return account.getRecordUser().toString();
}
if(columnIndex==5)
{
return account.getRecordDate().toString();
}
return "";
}
public Image getColumnImage(Object element, int columnIndex)
{
return null;
}
}
class ContentProvider implements IStructuredContentProvider {
public Object[] getElements(Object inputElement)
{
if(inputElement instanceof List)
{
return ((List)inputElement).toArray();
}
else
{
return new Object[0];
}
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}
private void addListener()
{
tv.addDoubleClickListener(new IDoubleClickListener()
{
public void doubleClick(DoubleClickEvent event)
{
IStructuredSelection selection=(IStructuredSelection)event.getSelection();
Account account=(Account)selection.getFirstElement();
MessageDialog.openInformation(null,"提示",
"序号:"+account.getId()+
"\n日期:"+account.getDate()+
"\n用途:"+account.getUseWhere() +
"\n金额:"+String.valueOf(account.getNumber())+
"\n记录人:"+account.getRecordUser()+
"\n记录日期:"+account.getRecordDate());
}
}
);
}}
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.*;public class TreeDemo { public static Display myDisplay;
public static boolean internalCall = false; public static void main(String[] args) {
internalCall = true;
myDisplay = new Display();
TreeDemo td = new TreeDemo();
td.runDemo(myDisplay);
}
public void runDemo(Display display) {
myDisplay = display;
Shell shell = new Shell(display);
shell.setText("Tree Demo"); shell.setSize(300,300);
shell.open(); //create the tree, give it a border, set its size/location
//SWT.MULTI indicates multiple items in the tree can be
//selected at once. SWT.SINGLE restricts it to just one
final Tree tree = new Tree(shell, SWT.MULTI | SWT.BORDER);
tree.setSize(150, 150);
tree.setLocation(5,5);
//create 3 nodes at the same, highest level
//note the third uses a 3rd argument to its
//constructor to say what index it should have in
//the tree(1). Otherwise they would simply
//appear in the order they were created here
TreeItem myComp = new TreeItem(tree, SWT.NONE);
myComp.setText("My Computer");
TreeItem netPlaces = new TreeItem(tree, SWT.NONE);
netPlaces.setText("My Network Places");
TreeItem myDocs = new TreeItem(tree, SWT.NONE, 1);
myDocs.setText("My Documents"); //create 2 nodes under My Computer, 2nd level
//the 2nd one passes 0 to become the sub-node at index
//0 in the list
TreeItem hardDisk = new TreeItem(myComp, SWT.NONE);
hardDisk.setText("Local Disk (C:)");
TreeItem floppy = new TreeItem(myComp, SWT.NONE, 0);
floppy.setText("3.5 Floppy (A:)");
//create an item 2 levels down, under Local Disk
TreeItem progFiles = new TreeItem(hardDisk, SWT.NONE);
progFiles.setText("Program Files"); //load an arrow image
Image icon = new Image(display, "EclipseBannerPic.jpg");
//add an image to the program files treeitem.
progFiles.setImage(icon);
//add a listener for changes to the selection(s)
//in the tree
tree.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
TreeItem[] t = tree.getSelection();
System.out.print("Selection: ");
for(int i = 0; i < t.length; i++) {
System.out.print(t[i].getText() + ", ");
}
System.out.println();
}
});
//listen for expansion and collapse of the tree
//and print a message to the console
tree.addTreeListener(new TreeListener() {
public void treeCollapsed(TreeEvent e) {
System.out.println("Tree collapsed.");
}
public void treeExpanded(TreeEvent e) {
System.out.println("Tree expanded.");
}
});
while(!shell.isDisposed())
if(!display.readAndDispatch())
display.sleep(); icon.dispose();
if (internalCall) display.dispose(); }}