标题: 在SWT里显示AWT对象
- 八进制 2005-07-17 23:10 阅读:2830
- 评论:6 查看评论 | 添加评论

今天遇到一个问题,就是要在一个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这样的带有双缓冲的控件,否则图象在运动时会产生明显的闪烁。


查看评论 | 添加评论
返回顶部 | 返回首页