当前位置: 首页 > 工具软件 > JFace > 使用案例 >

JFace初探

郑琦
2023-12-01
JFace是继承自SWT并用于简化通用UI开发工作的一套UI工具,它在其API以及实现上都是界面与系统独立的,并且被设计为运用时不对其实现的SWT隐藏。


总的来说,JFace的出现就是为了提高用SWT组件进行UI开发的效率,它对一些SWT常用组件进行了一定的封装,使其实现起来更加简便,使我们在开发时候可以把更多的注意力集中在具体功能的实现上面,而不是为界面设计而大费周章。



 

JFace为了简化窗口的设计特别设计了类,比如ApplicationWindow这一个类,它里面包含了六个默认方法,分别用于创建内容、菜单、工具栏、状态栏以及初始化和销毁。这样使整个程序的结构易于控制,而不是像单独用SWT开发时一切需要程序员自己实现。







 

下面我举一个非常简单的例子来说明JFace是如何实现一个窗口的。



 


首先,我们列出要写使用的包。


package org.eclipseguide.jface; 

import org.eclipse.jface.action.*; 
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT; 
import org.eclipse.swt.widgets.*;



 


第二步,我们要写出主类以及继承的类还有成员变量。


public class JFaceExample extends ApplicationWindow 
{ 
  private ExitAction m_ExitAction; 

    //这个类是我们要自己写的类,继承自Action。


接着,我们要申明构造函数,在构造函数里面,我们需要首先调用父类的构造函数。


       Public JFaceExample(){

       super(null); //父类接受一个参数为Shell类的对象作为父窗口句柄,


//如果这个窗口为顶级窗口的话,则传null


              m_ExitAction = new m_ExitAction(this);

              this.addMenuBar(); 

       //这三个为父类方法,作用已经通过方法名表示得很清楚
      this.addStatusLine(); 
      this.addToolBar(SWT.FLAT | SWT.WRAP);
  }


 


当它们时被程序调用时,它们依次调用createMenuManager(),createStatusLineManager(),以及createToolBarManager()。如果你希望能有一个菜单栏,状态条,或者一个工具栏,那就需要重载这些方法,确保它们返回正确的类型。我们很快就会看到这些方法的实现。



 


createContents()方法在你创建自己的程序时需要重载,以便创建并放置你的窗口小部件。在这个示例中,你只需要设置程序窗体标题和状态条:



 


protected Control createContents(Composite parent) 
  { 
    getShell().setText("JFace Example"); 
    setStatus("JFace Example v1.0"); 
    return parent; 
  }



 


我们要注意的一点是,程序窗口是在窗口中所有部件全部创建之后才创建的。接下来我们初始化窗口大小。



 


protected void initializeBounds()
  { 
    getShell().setSize(300, 200); 
  }



 


然后我们要做的工作是创建菜单,在SWT里面我们想创建菜单时很痛苦的事情,我们要写大量的代码,这样导致开发效率低下,而在JFace中,我们只需要在createMenuManager方法里面写少量代码即可。



 


protected MenuManager createMenuManager() 
  { 
    MenuManager menuBar = new MenuManager(""); 
    MenuManager fileMenu = new MenuManager("&File"); 
    MenuManager helpMenu = new MenuManager("&Help");
    menuBar.add(fileMenu); 
    menuBar.add(helpMenu); 

    //由于helpMenu没有子项,所以它不会显示出来
    fileMenu.add(m_ExitAction); 
    return menuBar; 
  }



 


StatusLineManager类提供了设置状态条文字的方法,可以用来控制显示在状态栏的一个进度条,也可以用来显示错误文字和图片:



 


protected StatusLineManager createStatusLineManager() 
  { 
    StatusLineManager statusLineManager = new StatusLineManager(); 
    statusLineManager.setMessage("Hello, world!"); 
    return statusLineManager; 
  }



 


创建一个工具栏只需创建ToolBarManager的一个实例,传入一个样式(style),然后加入任何动作(actions):



 


protected ToolBarManager createToolBarManager(int style) 
  { 
    ToolBarManager toolBarManager = new ToolBarManager(style); 
    toolBarManager.add(m_ExitAction); 
    return toolBarManager; 
  }



 


接下来就是我们熟悉的主函数了~~



 


public static void main(String[] args) 
  { 
    JFaceExample fe = new JFaceExample(); 
    fe.setBlockOnOpen(true); 
    fe.open(); 
    Display.getCurrent().dispose(); 
  } 
}



 


最后,我们要实现刚才的ExitAction类了。它继承自Action类,这个类是行为类,我们需要对它定义在它被激活时候所要做的事情。


首先,我们还是先引入要用的包。 



 


package org.eclipseguide.jface; 

import java.net.*; 
import org.eclipse.jface.action.Action; 
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.window.ApplicationWindow;



 


由于这个类比较简单,因此我一下子写出来,并且在必要的地方加注释。



 


public class ExitAction extends Action 
{


ApplicationWindow m_Window; 
  public ExitAction(ApplicationWindow w) 
  { 
    m_Window = w; //得到窗口对象
    setText("E&xit@Ctrl+W"); 
    setToolTipText("Exit the application");


}


public void run() //这个方法用于定义被激活时的行为
  { 
    window.close(); //当被激活时关闭窗口
  } 
}



 


这样,一个简单的窗口程序就算完成了。

 类似资料: