今天遇到一個問題,就是要在一個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這樣的帶有雙緩沖的控件,否則圖象在運動時會産生明顯的閃爍。