1

我正在尝试将 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 组合时会出现此错误。谁能解释我做错了什么以及如何解决?

4

1 回答 1

2

为了使嵌入成功,必须使用该SWT.EMBEDDED样式创建复合材料。

此外,您将采用另一种方式:在 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 调度线程中运行 SWT 代码和在 AWT 调度线程中运行 Swing 代码。

于 2013-08-08T06:16:24.647 回答