各位师兄:
  大家好,本人第一次用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里的那些方法都没有,所以很头疼。希望各位赐教,能详细点就更好了,再次声明分不是问题,若能写出
详细可用例子者,必另开贴赠分,谢谢。

解决方案 »

  1.   

    先给个table的
    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());
    }
    }
    );
    }}
      

  2.   

    tree的
    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(); }}