*设为首页
*加入收藏
网站导航
>>
首页
┊
业界新闻
┊
语言基础
┊
环境配置
┊
数据库应用
┊
J2EE
┊
J2ME
┊
JAVA代码
┊
认证考试
┊
实用技巧
热门关键字:
JAVA
智能
标题
>>当前位置:
Java大本营
>
Applet与Swing
>文章内容
SWT中使用ChartDirector
作者: 发布时间:2007-12-20 22:54:28
昨天晚上看到有人询问,回答一下。
因为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
String toString();
public
int
getNoOfCharts();
public
void
createChart(ChartDirector.ChartViewer viewer,
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
String toString()
...
{
return
"
ChartDirector饼图
"
; }
public
int
getNoOfCharts()
...
{
return
2
; }
public
void
createChart(ChartViewer viewer,
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
"
}
;
PieChart c
=
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测试
DemoModule demo
=
new
CakyDemo();
JFrame frame
=
new
JFrame(demo.toString());
frame.addWindowListener(
new
WindowAdapter()
...
{
public
void
windowClosing(WindowEvent e)
...
{
System.exit(
0
);
}
}
);
frame.getContentPane().setLayout(
new
FlowLayout(FlowLayout.LEFT));
frame.setSize(width, height);
for
(
int
i
=
0
; i
<
demo.getNoOfCharts();
++
i)
...
{
ChartViewer viewer
=
new
ChartViewer();
demo.createChart(viewer, i);
frame.getContentPane().add(viewer);
}
//
获得容器
Container container
=
frame.getContentPane();
Display display
=
new
Display();
Shell shell
=
new
Shell(display, SWT.CLOSE);
shell.setSize(
new
Point(width, height));
shell.setLayout(
new
FillLayout());
shell.setText(
"
ChartDirector in SWT
"
);
//
新建swt组件
Composite composite
=
new
Composite(shell, SWT.NO_BACKGROUND
|
SWT.EMBEDDED);
//
注入组件,并返回为frame
Frame frm
=
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罢了。
·
SWT树节点上弹出菜单的实现
(02-05)
·
基于 JSF+Spring + JPA 构建敏捷的Web
(02-01)
·
在SWING 的 JFileChooser中俘获返回的
(01-20)
·
SWT中设置TableViewer和TreeViewer为双
(01-19)
·
Spring之特殊字符转义和方法入参检测工
(01-16)
·
spring2.5 + hibernate3.2x 标注(annot
(01-13)
·
spring2.5 + hibernate3.2x 标注(annot
(01-13)
·
SWT中的FormLayout
(01-10)
·
Spring基础
(01-10)
·
Spring 让 LOB 数据操作简单化
(12-26)
·
Swing中使用Html标签
(12-26)
·
Swing中使用Html标签
(12-26)
复制地址发给您的好友:
[
推荐文章
]
[返回顶部]
[关闭窗口]
版权所有
Java大本营
1999-2007 转载请注明出处