在SWT中使用ChartDirector

系统 1877 0
昨天晚上看到有人询问,回答一下。

因为JFrame继承自Frame,是父子关系,所以Frame不能强转为JFrame使用。但是,却有取巧的方法令SWT操作Swing~

//JFrame实例
JFrame frame = new JFrame();
//获得容器
Container container = frame.getContentPane();
//画布
Canvas canvas = new Canvas();
//容器加载画布
container.add(canvas,BorderLayout.CENTER);
//显示
frame.setVisible(true);
//获得Display
Display display = new Display();
//转换canvas不就得了~~~为什么能转换?看看Frame继承自谁就知道了……
Shell shell = SWT_AWT.new_Shell(display,canvas);
//布局
shell.setLayout(new FillLayout());
//SWT按钮加载
Button button = new Button(shell,SWT.PUSH);
button.setText("SWT使用JFrame");
shell.pack();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()){
display.sleep ();
}
}


另外,再说一种利用new_Frame的方式,先写一个ChartDirector例子,应用了两个类。

DemoModule
... .java

package org.test.chartdir;

/***/ /**
*<p>
*Title:LoonFramework
*</p>
*<p>
*Description:
*</p>
*<p>
*Copyright:Copyright(c)2007
*</p>
*<p>
*Company:LoonFramework
*</p>
*
*
@author chenpeng
*@email:ceponline@yahoo.com.cn
*
@version 0.1
*/

public interface DemoModule ... {

public StringtoString();

public int getNoOfCharts();

public void createChart(ChartDirector.ChartViewerviewer, int index);

}


CakyDemo.java

package org.test.chartdir;

import ChartDirector.ChartViewer;
import ChartDirector.PieChart;

/***/ /**
*<p>Title:LoonFramework</p>
*<p>Description:</p>
*<p>Copyright:Copyright(c)2007</p>
*<p>Company:LoonFramework</p>
*
@author chenpeng
*@email:ceponline@yahoo.com.cn
*
@version 0.1
*/

public class CakyDemo implements DemoModule ... {

public StringtoString() ... { return " ChartDirector饼图 " ;}

public int getNoOfCharts() ... { return 2 ;}

public void createChart(ChartViewerviewer, int index)
... {
int angle = 0 ;
boolean clockwise = true ;
if (index != 0 ) ... {
angle
= 90 ;
clockwise
= false ;
}


double []data = ... { 25 , 18 , 15 , 12 , 8 , 30 , 35 } ;

String[]labels
= ... { " Labor " , " Licenses " , " Taxes " , " Legal " , " Insurance " ,
" Facilities " , " Production " }
;

PieChartc
= new PieChart( 280 , 240 );


c.setPieSize(
140 , 130 , 80 );

if (clockwise) ... {
c.addTitle(
" Start " + angle);
}
else ... {
c.addTitle(
" Start " + angle);
}


c.setStartAngle(angle,clockwise);

c.set3D();

c.setData(data,labels);

c.setExplode(
0 );

viewer.setImage(c.makeImage());

viewer.setImageMap(c.getHTMLImageMap(
" clickable " , "" ,
" title='{label}:US${value}K({percent}%)' " ));
}


}



我构建一个ShellSwingToSWT.java用作演示:

package org.test.chartdir;

import java.awt.BorderLayout;

import java.awt.Canvas;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;

import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;

import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

import ChartDirector.ChartViewer;

/***/ /**
*<p>
*Title:LoonFramework
*</p>
*<p>
*Description:
*</p>
*<p>
*Copyright:Copyright(c)2007
*</p>
*<p>
*Company:LoonFramework
*</p>
*
*
@author chenpeng
*@email:ceponline@yahoo.com.cn
*
@version 0.1
*/

public class ShellSwingToSWT ... {

public static void main(String[]args) ... {

int width = 600 ;

int height = 400 ;
// ChartDirector测试
DemoModuledemo = new CakyDemo();

JFrameframe
= new JFrame(demo.toString());

frame.addWindowListener(
new WindowAdapter() ... {
public void windowClosing(WindowEvente) ... {
System.exit(
0 );
}

}
);
frame.getContentPane().setLayout(
new FlowLayout(FlowLayout.LEFT));
frame.setSize(width,height);

for ( int i = 0 ;i < demo.getNoOfCharts(); ++ i) ... {
ChartViewerviewer
= new ChartViewer();
demo.createChart(viewer,i);
frame.getContentPane().add(viewer);
}


// 获得容器
Containercontainer = frame.getContentPane();

Displaydisplay
= new Display();

Shellshell
= new Shell(display,SWT.CLOSE);
shell.setSize(
new Point(width,height));
shell.setLayout(
new FillLayout());
shell.setText(
" ChartDirectorinSWT " );
// 新建swt组件
Compositecomposite = new Composite(shell,SWT.NO_BACKGROUND
| SWT.EMBEDDED);
// 注入组件,并返回为frame
Framefrm = SWT_AWT.new_Frame(composite);
// 加载容器
frm.add(container);
// 打开shell
shell.open();
while ( ! shell.isDisposed()) ... {
if ( ! display.readAndDispatch()) ... {
display.sleep();
}


}

}


}


其实也没什么可说的,只不过利用转换后的Frame载入JFrame的
container罢了。

这两种方式都可以实现Swing在SWT中的显示

在SWT中使用ChartDirector

只不过第一种利用Swing窗体的hWnd实例,一种在新建窗体中显示Frame罢了。

关于AWT/Swing在SWT中显示的原理其实很简单,为此昨天还写了个在AWT/Swing实现SWT功能的例子,一会有时间整理下发上来。

在SWT中使用ChartDirector


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论