将SWT Canvas添加到JPanel

时间:2013-08-07 20:16:15

标签: canvas swt awt swt-awt nattable

我正在尝试将一个NatTable(将org.eclipse.swt.widgets.Canvas扩展)添加到JPanel(该程序的大部分图形都在Swing中,而我对SWT并不熟悉)。我试图使用下面的代码来测试SWT_AWT类,但是我收到了一个错误:

org.eclipse.swt.widgets.Canvas canvas =
                new org.eclipse.swt.widgets.Canvas(
                        new org.eclipse.swt.widgets.Shell(
                                Display.getDefault(),
                                1264),
                        SWT.NONE);
        java.awt.Frame frame = SWT_AWT.new_Frame(canvas); //error here
        JPanel returnMe = new JPanel();
        returnMe.add(frame);

        return returnMe;

线程中的异常“AWT-EventQueue-0”java.lang.IllegalArgumentException:参数无效

我不明白为什么在传递SWT复合词时出现此错误。任何人都可以解释我做错了什么以及如何解决它?

1 个答案:

答案 0 :(得分:2)

  

In order for the embedding to succeed, the composite must have been created with the SWT.EMBEDDED style.

另外,您将采用另一种方式:在SWT中嵌入Swing组件。相反,你需要

java.awt.Canvas canvas = ...
// assumes this code is running in SWT thread
Shell shell = SWT_AWT.new_Shell(Display.getCurrent(), canvas); 
NatTable table = new NatTable(shell, SWT.NONE); // etc.

请注意,您需要安排在SWT调度线程和AWT调度线程中的Swing代码中运行SWT代码。