今天遇到一个问题,就是要在一个Eclipse插件里显示JFreeChart的图形,因为后者是基于Java2D的,要把图形显示在SWT应用程序里需要利用SWT-AWT桥接器来实现,虽说桥接的方式多半会伴随着性能下降,但总归是一个解决方法。
代码并不复杂,以下是一个片断:
public void createPartControl(Composite parent) {
parent.setLayout(new FillLayout(SWT.VERTICAL));
Composite drawarea = new Composite(parent, SWT.EMBEDDED);
drawarea.setLayout(new FillLayout());
Frame canvasFrame = SWT_AWT.new_Frame(drawarea);
canvas = new java.awt.Canvas() {
public void paint(Graphics g) {
super.paint(g);
if (chart != null)
chart.draw((Graphics2D) g, getBounds());
}
};
canvasFrame.add(canvas);
}
关键之处在于SWT_AWT.new_Frame()方法,得到的是一个java.awt.Frame对象,要显示的AWT内容都放在它上面就好。
BTW, SWT下免费的图表工具好象很少,只能暂时先这样使用JFreeChart了。
Update: 如果要在SWT里显示带有动画效果的AWT图形,最好在Frame上先放一个JPanel这样的带有双缓冲的控件,否则图象在运动时会产生明显的闪烁。
posted on 2005-07-17 23:10 八进制 阅读(2921) 评论(6) 编辑 收藏 网摘 所属分类: Java
评论
#1楼 2005-09-13 17:14 YYQQ [未注册用户]
不知道您是否遇到过这样的需求:要在一个GEF的Editor中显示SWT控件?这时该怎么办呢?
回复 引用
其实现在我就在为一个类似的问题烦恼,而且我还没有想出什么好办法。
Draw2d里倒有一些简单的控件(Clickable的子类)可以放在editor里,我想你多半也知道了。
回复 引用 查看
#3楼 2005-09-14 12:14 YYQQ [未注册用户]
这个我已作过试验。感觉这些控件较难控制,需要设置太多的东西。另外,还缺少如Table、Tree等对象,如果自己做也是很麻烦。苦恼中
回复 引用
#4楼 2006-05-29 17:29 baal [未注册用户]
八进制你好,我想问下如何在得到或判断出table中看不见的column?
回复 引用
#5楼 2006-10-31 15:52 路过 [未注册用户]
canvas = new java.awt.Canvas() {
public void paint(Graphics g) {
super.paint(g);
if (chart != null)
chart.draw((Graphics2D) g, getBounds());
}
};
canvasFrame.add(canvas);
___________________________________________________________
干吗不这样呢?
canvasFrame.add(new ChartPanel(chart));