天天看點

在SWT裡顯示AWT對象

今天遇到一個問題,就是要在一個Eclipse插件裡顯示JFreeChart的圖形,因為後者是基于Java2D的,要把圖形顯示在SWT應用程式裡需要利用SWT-AWT橋接器來實作,雖說橋接的方式多半會伴随着性能下降,但總歸是一個解決方法。

代碼并不複雜,以下是一個片斷:

在SWT裡顯示AWT對象

public void createPartControl(Composite parent) {

在SWT裡顯示AWT對象

    parent.setLayout(new FillLayout(SWT.VERTICAL));

在SWT裡顯示AWT對象

    Composite drawarea = new Composite(parent, SWT.EMBEDDED);

在SWT裡顯示AWT對象

    drawarea.setLayout(new FillLayout());

在SWT裡顯示AWT對象

    Frame canvasFrame = SWT_AWT.new_Frame(drawarea);

在SWT裡顯示AWT對象

    canvas = new java.awt.Canvas() {

在SWT裡顯示AWT對象

        public void paint(Graphics g) {

在SWT裡顯示AWT對象

            super.paint(g);

在SWT裡顯示AWT對象

            if (chart != null)

在SWT裡顯示AWT對象

                chart.draw((Graphics2D) g, getBounds());

在SWT裡顯示AWT對象

        }

在SWT裡顯示AWT對象

    };

在SWT裡顯示AWT對象

    canvasFrame.add(canvas);

在SWT裡顯示AWT對象

}

在SWT裡顯示AWT對象

關鍵之處在于SWT_AWT.new_Frame()方法,得到的是一個java.awt.Frame對象,要顯示的AWT内容都放在它上面就好。

BTW, SWT下免費的圖表工具好象很少,隻能暫時先這樣使用JFreeChart了。

Update: 如果要在SWT裡顯示帶有動畫效果的AWT圖形,最好在Frame上先放一個JPanel這樣的帶有雙緩沖的控件,否則圖象在運動時會産生明顯的閃爍。

繼續閱讀