代码之家  ›  专栏  ›  技术社区  ›  NullPointerException

SWT:如何在不同的RowLayout中使所有按钮的宽度相同

  •  0
  • NullPointerException  · 技术社区  · 7 年前

    我想显示一个5列9行的表。表格将显示45个按钮,每个按钮的编号将写在按钮文本中。第一列是从1到9的数字,所以按钮的宽度比下四列小,因为下一列有两位数的数字。

        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 回复  |  直到 7 年前
        1
  •  1
  •   greg-449    7 年前

    它使用 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++;
        }
    }
    
        2
  •  0
  •   josie    7 年前

    只需将pack设置为false。

    指定布局中的所有控件是否采用 首选尺寸

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