昨天晚上看到有人詢問,回答一下。
因為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中的顯示
只不過第一種利用Swing窗體的hWnd實例,一種在新建窗體中顯示Frame罷了。
關于AWT/Swing在SWT中顯示的原理其實很簡單,為此昨天還寫了個在AWT/Swing實現SWT功能的例子,一會有時間整理下發上來。
因為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






























CakyDemo.java






























































我構建一個ShellSwingToSWT.java用作演示:


































































































其實也沒什么可說的,只不過利用轉換后的Frame載入JFrame的 container罷了。
這兩種方式都可以實現Swing在SWT中的顯示

只不過第一種利用Swing窗體的hWnd實例,一種在新建窗體中顯示Frame罷了。
關于AWT/Swing在SWT中顯示的原理其實很簡單,為此昨天還寫了個在AWT/Swing實現SWT功能的例子,一會有時間整理下發上來。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
