Объединение GridLayout и FillLayout без добавления FormLayout? - PullRequest
0 голосов
/ 07 июня 2018

Java SWT предоставляет четыре стандартных класса компоновки: FillLayout, RowLayout, GridLayout, FormLayout.Я знаю, как использовать каждый из классов макетов, но мне сложно при комбинировании классов макетов.

Например, в моем приложении есть экран, который использует GridLayout.Я хотел бы добавить две вертикальные (т.е. FillLayout) макеты;Один макет слева от GridLayout, а другой макет справа от GridLayout.К сожалению, я не могу понять, как получить желаемый общий макет (то есть см. Ascii art внизу).

Примеры ответов приведены ниже по ссылке SO, но я хочу избежать слишком большого изменения кодадобавив FormLayout.

Могу ли я объединить SWT GridLayout и FillLayout

Существует ли пример кода, который позволит мне добавить два FillLayout в макет сетки без использования FormLayout?Должно выглядеть как показано ниже (игнорируйте плохо вставленную ascii в самой правой FillLayout).

+-------------+      +-------------------------------------------+          +--------------+
|             |      |                                           |      |                      |
|             |      |                                           |      |                  |
|             |      |                                           |      |                      |
|             |      |                                           |      |                      |
|  Fill Layout|      |     Grid Layout                           |      |      Fill Layout |
|             |      |                                           |      |                  |
|             |      |                                           |      |                  |
|             |      |                                           |      |                  |
|             |      |                                           |      |                  |
|             |      |                                           |      |                  |
|             |      |                                           |      |                  |
|             |      |                                           |      |                  |
|             |      |                                           |      |                  |
|             |      |                                           |      |                  |
|             |      |                                           |      |                  |
|             |      |                                           |      |                  |
|             |      |                                           |      |                  |
|             |      |                                           |      |                  |
+-------------+      +-------------------------------------------+          +--------------+

1 Ответ

0 голосов
/ 07 июня 2018

Попробуйте приведенный ниже код и дайте мне знать, если вы похожи на это.

Я использую Absolute Layout для оболочки, и я создал 3 композиции внутри моего приложения и применил Fill Layout для 2композитный и Grid Layout за 1 композитный.См. Код ниже

public class SampleWindow {

    protected Shell shell;

    /**
     * Launch the application.
     * @param args
     */
    public static void main(String[] args) {
        try {
            SampleWindow window = new SampleWindow();
            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(531, 363);
        shell.setText("SWT Application");

        Composite composite = new Composite(shell, SWT.BORDER);
        composite.setBounds(10, 10, 131, 304);
        composite.setLayout(new FillLayout(SWT.HORIZONTAL));

        Label lblNewLabel = new Label(composite, SWT.NONE);
        lblNewLabel.setText("Fill Layout");

        Composite composite_1 = new Composite(shell, SWT.BORDER);
        composite_1.setBounds(159, 10, 199, 304);
        composite_1.setLayout(new GridLayout(3, false));
        Label lblNewLabel_1 = new Label(composite_1, SWT.NONE);
        lblNewLabel_1.setText("Grid Layout");

        Composite composite_2 = new Composite(shell, SWT.BORDER);
        composite_2.setBounds(382, 10, 123, 304);
        composite_2.setLayout(new FillLayout(SWT.HORIZONTAL));

        Label lblNewLabel_2 = new Label(composite_2, SWT.NONE);
        lblNewLabel_2.setText("Fill Layout");

    }
}

Вывод будет аналогичен приведенному ниже:

Sample SWT application window

...