首页 > 解决方案 > SWT:如何在各种 RowLayout 内的所有按钮中具有相同的宽度

问题描述

我想显示一个 5 列 9 行的表格。该表将显示 45 个按钮,每个按钮都将在按钮文本中写入数字。第一列包含从 1 到 9 的数字,因此按钮的宽度小于接下来的四列,因为接下来的列具有两位数字。

目标是在五个 RowLayout 的 45 个按钮中具有相同的宽度。

    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++;
        }
    }

我不想为所有按钮设置固定大小,因为如果用户增加计算机中的字体大小,那么文本将不会以固定大小完全可见。

标签: javalayoutswtcomposite

解决方案


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++;
    }
}

推荐阅读