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

因为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

在SWT中使用ChartDirectorpackageorg.test.chartdir;
在SWT中使用ChartDirector
在SWT中使用ChartDirector在SWT中使用ChartDirector
/***//**
在SWT中使用ChartDirector*<p>
在SWT中使用ChartDirector*Title:LoonFramework
在SWT中使用ChartDirector*</p>
在SWT中使用ChartDirector*<p>
在SWT中使用ChartDirector*Description:
在SWT中使用ChartDirector*</p>
在SWT中使用ChartDirector*<p>
在SWT中使用ChartDirector*Copyright:Copyright(c)2007
在SWT中使用ChartDirector*</p>
在SWT中使用ChartDirector*<p>
在SWT中使用ChartDirector*Company:LoonFramework
在SWT中使用ChartDirector*</p>
在SWT中使用ChartDirector*
在SWT中使用ChartDirector*
@authorchenpeng
在SWT中使用ChartDirector*@email:[email protected]
在SWT中使用ChartDirector*
@version0.1
在SWT中使用ChartDirector
*/

在SWT中使用ChartDirector在SWT中使用ChartDirector
publicinterfaceDemoModule...{
在SWT中使用ChartDirector
在SWT中使用ChartDirector
publicStringtoString();
在SWT中使用ChartDirector
在SWT中使用ChartDirector
publicintgetNoOfCharts();
在SWT中使用ChartDirector
在SWT中使用ChartDirector
publicvoidcreateChart(ChartDirector.ChartViewerviewer,intindex);
在SWT中使用ChartDirector
在SWT中使用ChartDirector}

在SWT中使用ChartDirector

CakyDemo.java

在SWT中使用ChartDirectorpackageorg.test.chartdir;
在SWT中使用ChartDirector
在SWT中使用ChartDirector
importChartDirector.ChartViewer;
在SWT中使用ChartDirector
importChartDirector.PieChart;
在SWT中使用ChartDirector
在SWT中使用ChartDirector在SWT中使用ChartDirector
/***//**
在SWT中使用ChartDirector*<p>Title:LoonFramework</p>
在SWT中使用ChartDirector*<p>Description:</p>
在SWT中使用ChartDirector*<p>Copyright:Copyright(c)2007</p>
在SWT中使用ChartDirector*<p>Company:LoonFramework</p>
在SWT中使用ChartDirector*
@authorchenpeng
在SWT中使用ChartDirector*@email:[email protected]
在SWT中使用ChartDirector*
@version0.1
在SWT中使用ChartDirector
*/

在SWT中使用ChartDirector在SWT中使用ChartDirector
publicclassCakyDemoimplementsDemoModule...{
在SWT中使用ChartDirector
在SWT中使用ChartDirector在SWT中使用ChartDirector
publicStringtoString()...{return"ChartDirector饼图";}
在SWT中使用ChartDirector
在SWT中使用ChartDirector在SWT中使用ChartDirector
publicintgetNoOfCharts()...{return2;}
在SWT中使用ChartDirector
在SWT中使用ChartDirector
publicvoidcreateChart(ChartViewerviewer,intindex)
在SWT中使用ChartDirector在SWT中使用ChartDirector
...{
在SWT中使用ChartDirector
intangle=0;
在SWT中使用ChartDirector
booleanclockwise=true;
在SWT中使用ChartDirector在SWT中使用ChartDirector
if(index!=0)...{
在SWT中使用ChartDirectorangle
=90;
在SWT中使用ChartDirectorclockwise
=false;
在SWT中使用ChartDirector}

在SWT中使用ChartDirector
在SWT中使用ChartDirector在SWT中使用ChartDirector
double[]data=...{25,18,15,12,8,30,35};
在SWT中使用ChartDirector
在SWT中使用ChartDirector在SWT中使用ChartDirectorString[]labels
=...{"Labor","Licenses","Taxes","Legal","Insurance",
在SWT中使用ChartDirector
"Facilities","Production"}
;
在SWT中使用ChartDirector
在SWT中使用ChartDirectorPieChartc
=newPieChart(280,240);
在SWT中使用ChartDirector
在SWT中使用ChartDirector
在SWT中使用ChartDirectorc.setPieSize(
140,130,80);
在SWT中使用ChartDirector
在SWT中使用ChartDirector在SWT中使用ChartDirector
if(clockwise)...{
在SWT中使用ChartDirectorc.addTitle(
"Start"+angle);
在SWT中使用ChartDirector在SWT中使用ChartDirector}
else...{
在SWT中使用ChartDirectorc.addTitle(
"Start"+angle);
在SWT中使用ChartDirector}

在SWT中使用ChartDirector
在SWT中使用ChartDirectorc.setStartAngle(angle,clockwise);
在SWT中使用ChartDirector
在SWT中使用ChartDirectorc.set3D();
在SWT中使用ChartDirector
在SWT中使用ChartDirectorc.setData(data,labels);
在SWT中使用ChartDirector
在SWT中使用ChartDirectorc.setExplode(
0);
在SWT中使用ChartDirector
在SWT中使用ChartDirectorviewer.setImage(c.makeImage());
在SWT中使用ChartDirector
在SWT中使用ChartDirectorviewer.setImageMap(c.getHTMLImageMap(
"clickable","",
在SWT中使用ChartDirector
"title='{label}:US${value}K({percent}%)'"));
在SWT中使用ChartDirector}

在SWT中使用ChartDirector
在SWT中使用ChartDirector}

在SWT中使用ChartDirector
在SWT中使用ChartDirector

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

在SWT中使用ChartDirectorpackageorg.test.chartdir;
在SWT中使用ChartDirector
在SWT中使用ChartDirector
importjava.awt.BorderLayout;
在SWT中使用ChartDirector
在SWT中使用ChartDirector
importjava.awt.Canvas;
在SWT中使用ChartDirector
在SWT中使用ChartDirector
importjava.awt.Container;
在SWT中使用ChartDirector
importjava.awt.FlowLayout;
在SWT中使用ChartDirector
importjava.awt.Frame;
在SWT中使用ChartDirector
importjava.awt.GridLayout;
在SWT中使用ChartDirector
importjava.awt.event.WindowAdapter;
在SWT中使用ChartDirector
importjava.awt.event.WindowEvent;
在SWT中使用ChartDirector
在SWT中使用ChartDirector
importjavax.swing.JFrame;
在SWT中使用ChartDirector
在SWT中使用ChartDirector
importorg.eclipse.swt.SWT;
在SWT中使用ChartDirector
importorg.eclipse.swt.awt.SWT_AWT;
在SWT中使用ChartDirector
importorg.eclipse.swt.graphics.Point;
在SWT中使用ChartDirector
importorg.eclipse.swt.layout.FillLayout;
在SWT中使用ChartDirector
在SWT中使用ChartDirector
importorg.eclipse.swt.widgets.Composite;
在SWT中使用ChartDirector
importorg.eclipse.swt.widgets.Display;
在SWT中使用ChartDirector
importorg.eclipse.swt.widgets.Shell;
在SWT中使用ChartDirector
在SWT中使用ChartDirector
importChartDirector.ChartViewer;
在SWT中使用ChartDirector
在SWT中使用ChartDirector在SWT中使用ChartDirector
/***//**
在SWT中使用ChartDirector*<p>
在SWT中使用ChartDirector*Title:LoonFramework
在SWT中使用ChartDirector*</p>
在SWT中使用ChartDirector*<p>
在SWT中使用ChartDirector*Description:
在SWT中使用ChartDirector*</p>
在SWT中使用ChartDirector*<p>
在SWT中使用ChartDirector*Copyright:Copyright(c)2007
在SWT中使用ChartDirector*</p>
在SWT中使用ChartDirector*<p>
在SWT中使用ChartDirector*Company:LoonFramework
在SWT中使用ChartDirector*</p>
在SWT中使用ChartDirector*
在SWT中使用ChartDirector*
@authorchenpeng
在SWT中使用ChartDirector*@email:[email protected]
在SWT中使用ChartDirector*
@version0.1
在SWT中使用ChartDirector
*/

在SWT中使用ChartDirector在SWT中使用ChartDirector
publicclassShellSwingToSWT...{
在SWT中使用ChartDirector
在SWT中使用ChartDirector在SWT中使用ChartDirector
publicstaticvoidmain(String[]args)...{
在SWT中使用ChartDirector
在SWT中使用ChartDirector
intwidth=600;
在SWT中使用ChartDirector
在SWT中使用ChartDirector
intheight=400;
在SWT中使用ChartDirector
//ChartDirector测试
在SWT中使用ChartDirector
DemoModuledemo=newCakyDemo();
在SWT中使用ChartDirector
在SWT中使用ChartDirectorJFrameframe
=newJFrame(demo.toString());
在SWT中使用ChartDirector
在SWT中使用ChartDirector在SWT中使用ChartDirectorframe.addWindowListener(
newWindowAdapter()...{
在SWT中使用ChartDirector在SWT中使用ChartDirector
publicvoidwindowClosing(WindowEvente)...{
在SWT中使用ChartDirectorSystem.exit(
0);
在SWT中使用ChartDirector}

在SWT中使用ChartDirector}
);
在SWT中使用ChartDirectorframe.getContentPane().setLayout(
newFlowLayout(FlowLayout.LEFT));
在SWT中使用ChartDirectorframe.setSize(width,height);
在SWT中使用ChartDirector
在SWT中使用ChartDirector在SWT中使用ChartDirector
for(inti=0;i<demo.getNoOfCharts();++i)...{
在SWT中使用ChartDirectorChartViewerviewer
=newChartViewer();
在SWT中使用ChartDirectordemo.createChart(viewer,i);
在SWT中使用ChartDirectorframe.getContentPane().add(viewer);
在SWT中使用ChartDirector}

在SWT中使用ChartDirector
在SWT中使用ChartDirector
//获得容器
在SWT中使用ChartDirector
Containercontainer=frame.getContentPane();
在SWT中使用ChartDirector
在SWT中使用ChartDirectorDisplaydisplay
=newDisplay();
在SWT中使用ChartDirector
在SWT中使用ChartDirectorShellshell
=newShell(display,SWT.CLOSE);
在SWT中使用ChartDirectorshell.setSize(
newPoint(width,height));
在SWT中使用ChartDirectorshell.setLayout(
newFillLayout());
在SWT中使用ChartDirectorshell.setText(
"ChartDirectorinSWT");
在SWT中使用ChartDirector
//新建swt组件
在SWT中使用ChartDirector
Compositecomposite=newComposite(shell,SWT.NO_BACKGROUND
在SWT中使用ChartDirector
|SWT.EMBEDDED);
在SWT中使用ChartDirector
//注入组件,并返回为frame
在SWT中使用ChartDirector
Framefrm=SWT_AWT.new_Frame(composite);
在SWT中使用ChartDirector
//加载容器
在SWT中使用ChartDirector
frm.add(container);
在SWT中使用ChartDirector
//打开shell
在SWT中使用ChartDirector
shell.open();
在SWT中使用ChartDirector在SWT中使用ChartDirector
while(!shell.isDisposed())...{
在SWT中使用ChartDirector在SWT中使用ChartDirector
if(!display.readAndDispatch())...{
在SWT中使用ChartDirectordisplay.sleep();
在SWT中使用ChartDirector}

在SWT中使用ChartDirector
在SWT中使用ChartDirector}

在SWT中使用ChartDirector}

在SWT中使用ChartDirector
在SWT中使用ChartDirector}

在SWT中使用ChartDirector

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

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

在SWT中使用ChartDirector

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

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

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-05
  • 2022-12-23
  • 2021-06-14
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-05-27
  • 2021-10-22
  • 2021-05-22
  • 2022-12-23
  • 2021-08-25
相关资源
相似解决方案