Компоновки SWT - Невозможно вертикально отцентрировать текстовый виджет в GridLayout - PullRequest
0 голосов
/ 28 декабря 2011

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

После преобразования нескольких надписей в сетке в текст только для чтения, мы не можем получить текст по центру. Ниже приведен простой пример калькулятора, в котором мы видим то же поведение. Я поиграл с SWT.CENTER, SWT.FILL как в GridData, так и в Text, но, похоже, не могу получить контроль по центру по вертикали.

public void initUI() {

        GridLayout g1 = new GridLayout(4, true);
        g1.horizontalSpacing = 4;
        g1.verticalSpacing = 4;
        g1.marginBottom = 5;
        g1.marginTop = 5;
        shell.setLayout(g1);

        String[] buttons = {
                "Cls", "Bck", "", "Close", "7", "8", "9", "/", "4",
                "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+"
        };

        Text display = new Text(shell, SWT.SINGLE);
        GridData gridData = new GridData();
        gridData.horizontalSpan = 4;
        gridData.horizontalAlignment = GridData.FILL;
        display.setLayoutData(gridData);

        for (int i = 0; i < buttons.length; i++) {

            if (i == 2) {
                Label lbl = new Label(shell, SWT.CENTER);
                GridData gd = new GridData(SWT.FILL, SWT.FILL, false, false);
                lbl.setLayoutData(gd);
            } else {
               Text btn = new Text(shell,SWT.SINGLE | SWT.READ_ONLY | SWT.BORDER);
               btn.setText(buttons[i]);
               GridData gd = new GridData(SWT.CENTER, SWT.CENTER, true, true);

               gd.widthHint = 50;
               gd.heightHint = 30;
               btn.setLayoutData(gd);
               btn.selectAll();


            }
        }

    }

Ответы [ 2 ]

2 голосов
/ 28 декабря 2011

Я думаю, вы хотите, чтобы текст был горизонтально центрирован (он уже центрирован по вертикали).Внесите это изменение, и оно будет отцентрировано в обе стороны (я добавил SWT.CENTER к Text):

Text btn = new Text(shell, SWT.SINGLE | SWT.READ_ONLY
    | SWT.BORDER | SWT.CENTER);
0 голосов
/ 13 февраля 2012

Вот простой способ, который работает для меня.

Label label = new Label(composite, SWT.CENTER);
label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
label.setText("\nText");

Хак - добавлять новые строки (\ n) к тексту.

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