Изменить порядок элемента в RowLayout SWT Java - PullRequest
6 голосов
/ 12 февраля 2012

Есть ли способ изменить порядок элементов, которые создаются в макете строки, Я хочу отобразить его в элементах, как показано первым. Например, если я создаю element1, то element2 element3, element4

Я хочу видеть макет как element4 element3 element2 element1

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

Есть ли простой способ работать с макетом строки и делать это.

Я хочу изменить следующий пример на отображаемый Button99 Button98 Button97 Button96 Button95 Button94 ……………………………….

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class TestExample
{
    public static void main(String[] args)
    {
        Display display = Display.getDefault();
        Shell shell = new Shell(display);
        RowLayout rowLayout = new RowLayout();

        shell.setLayout(rowLayout);

        for (int i=0;i<100;i++)
        {
            Button b1 = new Button(shell, SWT.PUSH);
            b1.setText("Button"+i);

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

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 13 февраля 2012

FillLayout, RowLayout и GridLayout используют z-порядок элементов управления , чтобы определить порядок элементов управления . (Поскольку эти три макета не позволяют элементам управления визуально перекрывать друг друга, z-порядок в противном случае будет игнорироваться.)

По умолчанию z-порядок основан на создании - таким образом, по умолчанию контролирует порядок, в котором вы добавили их к их родителю.

Вы можете изменить z-порядок (и, следовательно, изменить порядок рисования виджетов), используя методы Control.moveAbove() и Control.moveBelow().

0 голосов
/ 15 мая 2014

Если вы используете один из макетов SWT, то:

уже: item01, item02, item03 вставьте item04 перед item02: 1. создать item04 2. item04.moveAbove (item02)

Display display = new Display();
Shell shell = new Shell(display);
shell.setSize(640, 480);

shell.setLayout(new FillLayout());

final Composite itemComposite = new Composite(shell, SWT.NONE);
itemComposite.setLayout(new RowLayout());
Label item01 = new Label(itemComposite, SWT.NONE);
item01.setText("item01");
final Label item02 = new Label(itemComposite, SWT.NONE);
item02.setText("item02");
Label item03 = new Label(itemComposite, SWT.NONE);
item03.setText("item03");

Composite buttonComposite = new Composite(shell, SWT.NONE);
buttonComposite.setLayout(new GridLayout());
Button insertItem = new Button(buttonComposite, SWT.NONE);
insertItem.setText("Insert");
insertItem.addListener(SWT.Selection, new Listener() {
    public void handleEvent(Event arg0) {
    Label item04 = new Label(itemComposite, SWT.NONE);
    item04.setText("item04");
    item04.moveAbove(item02);
    itemComposite.layout();
}
});

shell.open();
while (!shell.isDisposed()) {
    if (!display.readAndDispatch())
    display.sleep();
}
display.dispose();
0 голосов
/ 12 февраля 2012

Кажется, что нет никакого свойства для установки, чтобы элементы RowLayout были расположены в обратном порядке.Таким образом, вы можете удерживать элементы в массиве в обратном порядке, а затем добавить их все в цикле или для этого конкретного примера, просто измените начальное и конечное условие цикла for так, чтобы оно было похоже на Button99 Button98 ...: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...