Как вставить виджет Swing в SWT, я получаю исключение в потоке "main" java.lang.IllegalArgumentException при использовании SWT_AWT.new_Frame - PullRequest
2 голосов
/ 18 мая 2019

Привет, я новичок в затмении, и я хотел добавить компонент Swing, такой как JCombobox, в свой существующий код в SWT. Есть ли способы сделать это через доступные API в SWT или Swing?

Я использовал SWT_AWT.new_Frame (составной) API, который был предложен. Вот мой код

public static void main(String[] args) {
        final Display display = new Display();
        final Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());

        Composite composite = new Composite(shell, SWT.NO_BACKGROUND);
        Frame myframe = SWT_AWT.new_Frame(composite);
        Panel mypanel = new Panel(new BorderLayout()) {
            @Override
            public void update(java.awt.Graphics g) {
                paint(g);
            }
        };
        myframe.add(mypanel);
        JRootPane root = new JRootPane();
        mypanel.add(root);
        java.awt.Container contentPane = root.getContentPane();
        String languages[]={"C","C++","C#","Java","PHP"};        
        final JComboBox cb=new JComboBox(languages);  

        JScrollPane scrollPane = new JScrollPane(cb);
        contentPane.setLayout(new BorderLayout());
        contentPane.add(scrollPane);

        shell.open();
        while(!shell.isDisposed()) {
            if (!display.readAndDispatch()) display.sleep();
        }
        display.dispose();
    }

Я получаю ниже исключения.

Exception in thread "main" java.lang.IllegalArgumentException: Argument not valid
    at org.eclipse.swt.SWT.error(SWT.java:4533)
    at org.eclipse.swt.SWT.error(SWT.java:4467)
    at org.eclipse.swt.SWT.error(SWT.java:4438)
    at org.eclipse.swt.awt.SWT_AWT.new_Frame(SWT_AWT.java:129)

1 Ответ

2 голосов
/ 18 мая 2019

Вы действительно использовали правильный API.Но вы упустили возможность добавить такую ​​функцию, как встраивание виджетов AWT в SWT при создании Composite. SWT.EMBEDDED

Composite composite = new Composite(shell, SWT.NO_BACKGROUND | SWT.EMBEDDED);
        Frame frame = SWT_AWT.new_Frame(composite);

Перейдите по Справка по Eclipse по этой ссылке, чтобы узнать больше об использовании этого API.

...