SWT: как иметь одинаковую ширину во всех кнопках внутри различных RowLayout - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу отобразить таблицу с 5 столбцами и 9 строками. В таблице будет отображаться 45 кнопок, каждая из которых будет иметь номер, записанный в тексте кнопки. Первый столбец имеет числа от 1 до 9, поэтому кнопки имеют ширину, меньшую, чем у следующих четырех столбцов, поскольку в следующих столбцах есть номера с двумя цифрами.

Цель состоит в том, чтобы иметь одинаковую ширину в 45 кнопках пяти RowLayout.

    Composite numbersComposite = new Composite(composite, SWT.NONE);
    numbersComposite.setLayout(new GridLayout(5, true));

    int rows = 9;
    int columns = 5;                        

    for (int i=0; i<columns; i++) {
        Composite column = new Composite(numbersComposite, SWT.NONE);
        RowLayout columnLayout = new RowLayout(SWT.VERTICAL);
        columnLayout.fill = true;
        column.setLayout(columnLayout);

        for (int j=0;j<rows; j++) {         
            button = new Button(column, SWT.TOGGLE);
            button.setText(""+number);      
            buttons.add(button);    
            number++;
        }
    }

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

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Используется GridLayout для всего и устанавливает GridData на всех элементах управления и композитах для заполнения столбцов:

for (int i = 0; i < columns; i++) {
    Composite column = new Composite(numbersComposite, SWT.NONE);
    column.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));

    GridLayout columnLayout = new GridLayout();
    column.setLayout(columnLayout);

    for (int j = 0; j < rows; j++) {
        Button button = new Button(column, SWT.TOGGLE);
        button.setText(Integer.toString(number));

        button.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

        buttons.add(button);

        number++;
    }
}
0 голосов
/ 05 ноября 2018

Просто установите для пакета значение false.

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

columnLayout.pack = false;
column.setLayout(columnLayout)
...