阅读JAVA GUI (windowsbuilder)源码案例 挑战两个思考问题

版权所有,禁止匿名转载;禁止商业使用。

 学JAVA和GUI,必然会使用eclipse+windowsbuilder,那么在做类似编辑器的东西难免会遇到一些问题,比如:源程序如下

package src; 
  
import java.awt.Color; 
import java.awt.Graphics; 
  
import org.eclipse.swt.SWT; 
import org.eclipse.swt.events.DragDetectEvent; 
import org.eclipse.swt.events.DragDetectListener; 
import org.eclipse.swt.events.MenuDetectEvent; 
import org.eclipse.swt.events.MenuDetectListener; 
import org.eclipse.swt.events.MouseAdapter; 
import org.eclipse.swt.events.MouseEvent; 
import org.eclipse.swt.events.MouseMoveListener; 
import org.eclipse.swt.events.MouseTrackAdapter; 
import org.eclipse.swt.events.PaintEvent; 
import org.eclipse.swt.events.PaintListener; 
import org.eclipse.swt.events.SelectionAdapter; 
import org.eclipse.swt.events.SelectionEvent; 
import org.eclipse.swt.graphics.Point; 
import org.eclipse.swt.graphics.Rectangle; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.layout.FormAttachment; 
import org.eclipse.swt.layout.FormData; 
import org.eclipse.swt.layout.FormLayout; 
import org.eclipse.swt.widgets.Button; 
import org.eclipse.swt.widgets.Canvas; 
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 com.cloudgarden.resource.SWTResourceManager; 
  
public class test1 extends org.eclipse.swt.widgets.Composite{ 
    private Graphics g1; 
  private Button button6; 
  private Button button5; 
  private Button button4; 
  private Button button3; 
  private Button line; 
  private Canvas canvas1; 
  private Button button1;   
  private  int x1,x2,y1,y2;//记录坐标位置 
  private enum checkState{button1,button2,button3,button4,button5,button6}; 
  checkState check; 
  { 
    //Register as a resource user - SWTResourceManager will 
    //handle the obtaining and disposing of resources 
    SWTResourceManager.registerResourceUser(this); 
  } 
  
  public test1(Composite parent, int style) { 
    super(parent, style); 
    initGUI(); 
  } 
  /** 
  * Initializes the GUI. 
  */ 
  private void initGUI() { 
    try { 
      this.setSize(557, 424); 
      this.setBackground(SWTResourceManager.getColor(192, 192, 192)); 
      FormLayout thisLayout = new FormLayout(); 
      this.setLayout(thisLayout); 
      this.setDragDetect(false); 
      this.addMouseListener(new MouseAdapter() { 
        public void mouseUp(MouseEvent evt) 
        {   
          x2=evt.x; 
          y2=evt.y; 
          System.out.print(x2+y2); 
        } 
        public void mouseDown(MouseEvent evt)  
        {    
          x1=evt.x; 
          y1=evt.y; 
          x2=x1; 
          y2=y1; 
          System.out.print(x1+y1); 
        } 
         
      }); 
      { 
        //canvas  
        FormData canvas1LData = new FormData(); 
        canvas1LData.left =  new FormAttachment(0, 1000, 96); 
        canvas1LData.top =  new FormAttachment(0, 1000, 21); 
        canvas1LData.width = 362; 
        canvas1LData.height = 385; 
        canvas1 = new Canvas(this, SWT.None); 
        canvas1.setLayoutData(canvas1LData); 
        canvas1.setBackground(SWTResourceManager.getColor(255, 255, 255)); 
        canvas1.setEnabled(false); 
        canvas1.addPaintListener(new PaintListener() { 
           
          public void paintControl(PaintEvent evt) { 
            evt.gc.drawLine(x1, y1, x2, y2); 
            System.out.println("canvas1.paintControl"); 
            //TODO add your code for canvas1.paintControl 
          } 
        }); 
  
      } 
      { 
        button1 = new Button(this, SWT.PUSH | SWT.CENTER); 
        FormData button1LData = new FormData(); 
        button1LData.left =  new FormAttachment(0, 1000, 12); 
        button1LData.top =  new FormAttachment(0, 1000, 8); 
        button1LData.width = 72; 
        button1LData.height = 60; 
        button1.setLayoutData(button1LData); 
        button1.setImage(SWTResourceManager.getImage("src/箭头.bmp")); 
        button1.setGrayed(true); 
      } 
      { 
        line = new Button(this, SWT.PUSH | SWT.CENTER); 
        FormData button2LData = new FormData(); 
        button2LData.left =  new FormAttachment(0, 1000, 12); 
        button2LData.top =  new FormAttachment(0, 1000, 72); 
        button2LData.width = 72; 
        button2LData.height = 63; 
        line.setLayoutData(button2LData); 
        line.setImage(SWTResourceManager.getImage("src/直线.bmp")); 
         
        line.addSelectionListener(new SelectionAdapter() { 
          public void widgetSelected(SelectionEvent evt) { 
            button2WidgetSelected(evt); 
          } 
        }); 
      } 
      { 
        button3 = new Button(this, SWT.PUSH | SWT.CENTER); 
        button3.setImage(SWTResourceManager.getImage("src/箭头2.bmp")); 
        FormData button3LData = new FormData(); 
        button3LData.left =  new FormAttachment(0, 1000, 12); 
        button3LData.top =  new FormAttachment(0, 1000, 141); 
        button3LData.width = 72; 
        button3LData.height = 65; 
        button3.setLayoutData(button3LData); 
      } 
      { 
        button4 = new Button(this, SWT.PUSH | SWT.CENTER); 
        button4.setImage(SWTResourceManager.getImage("src/组合线.bmp")); 
        FormData button4LData = new FormData(); 
        button4LData.left =  new FormAttachment(0, 1000, 12); 
        button4LData.top =  new FormAttachment(0, 1000, 212); 
        button4LData.width = 72; 
        button4LData.height = 61; 
        button4.setLayoutData(button4LData); 
      } 
      { 
        button5 = new Button(this, SWT.PUSH | SWT.CENTER); 
        button5.setImage(SWTResourceManager.getImage("src/CLASS.bmp")); 
        FormData button5LData = new FormData(); 
        button5LData.left =  new FormAttachment(0, 1000, 12); 
        button5LData.top =  new FormAttachment(0, 1000, 279); 
        button5LData.width = 72; 
        button5LData.height = 59; 
        button5.setLayoutData(button5LData); 
      } 
      { 
        button6 = new Button(this, SWT.PUSH | SWT.CENTER); 
        button6.setImage(SWTResourceManager.getImage("src/case.bmp")); 
        FormData button6LData = new FormData(); 
        button6LData.left =  new FormAttachment(0, 1000, 12); 
        button6LData.top =  new FormAttachment(0, 1000, 350); 
        button6LData.width = 72; 
        button6LData.height = 62; 
        button6.setLayoutData(button6LData); 
      } 
      this.layout(); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
  } 
   
  public static void main(String[] args) { 
    Display display = Display.getDefault(); 
    Shell shell = new Shell(display); 
    test1 inst = new test1 (shell, SWT.NULL); 
    Point size = inst.getSize(); 
    shell.setLayout(new FillLayout()); 
    shell.layout(); 
    if(size.x == 0 && size.y == 0) { 
      inst.pack(); 
      shell.pack(); 
    } else { 
      Rectangle shellBounds = shell.computeTrim(0, 0, size.x, size.y); 
      shell.setSize(shellBounds.width, shellBounds.height); 
    } 
    shell.open(); 
    while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
        display.sleep(); 
    } 
  } 
   
  private void button2WidgetSelected(SelectionEvent evt) { 
    check=checkState.button2; 
    System.out.print(check); 
  } 
   
     }

考:1、在canvas画"线"可以即时显示吗,若想在画布上抓取鼠标行为(座标等等),可行吗,目前只能在Composite和button有反应。

2、若想在画布上把画出来的图形作为新创建的对象ex:mydrawLine对象(建构即会调用drawLine()),那么该朝哪个方向着手。

  • 分类:Java
  • 标签: Java
0 0