Композит в приложении SWT - Window Builder

Я пытаюсь достичь очень простой цели, которая раньше была довольно простой на платформе .net: создать повторно используемый компонент и использовать его в другой форме. Я пытался сделать следующее:

package ***.composites;

import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;

public class CompTest extends Composite {

    /**
     * Create the composite.
     * @param parent
     * @param style
     */
    public CompTest(Composite parent, int style) {
        super(parent, style);

        Composite composite = new Composite(this, SWT.NONE);
        composite.setBounds(10, 10, 273, 261);

        Button btnCheckButton = new Button(composite, SWT.CHECK);
        btnCheckButton.setBounds(82, 112, 93, 16);
        btnCheckButton.setText("Check Button");

    }

    @Override
    protected void checkSubclass() {
        // Disable the check that prevents subclassing of SWT components
    }

}

а также

package ***.composites;

import org.eclipse.swt.widgets.Display;

public class WindTest {

    protected Shell shell;
    private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());

    /**
     * Launch the application.
     * @param args
     */
    public static void main(String[] args) {
        try {
            WindTest window = new WindTest();
            window.open();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Open the window.
     */
    public void open() {
        Display display = Display.getDefault();
        createContents();
        shell.open();
        shell.layout();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }

    /**
     * Create contents of the window.
     */
    protected void createContents() {
        shell = new Shell();
        shell.setSize(450, 377);
        shell.setText("SWT Application");

        Composite composite = formToolkit.createComposite(shell, SWT.NONE);
        composite.setBounds(10, 10, 173, 105);
        formToolkit.paintBordersFor(composite);

    }
}

Как я могу добавить первый составной класс во второй? Есть ли способ сделать это в режиме конструктора? Я правильно делаю?


person Alex    schedule 06.11.2012    source источник


Ответы (2)


Я немного запутался в некоторых объектах, используемых во второй части, и в том, как они соотносятся с пользовательским Composite в первой части, но главное, что я отмечу, это то, что вы не устанавливаете макет для своего пользовательского Объект CompTest. Каждый раз, когда вы используете виджеты SWT, они должны находиться в родительском композите, на котором установлен макет, иначе ничего не будет отображаться. Я не верю, что установка произвольных границ поможет обойти это ограничение.

Также обратите внимание, что Composite и Canvas автоматически расширяются, вам не нужно переопределять метод «checkSubclass».

person BenG    schedule 06.11.2012

Да, вы можете использовать свои собственные элементы управления в WindowBuilder, см. документацию. для деталей.

person Alexey Romanov    schedule 06.11.2012