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

Java SWT:setSize()无法处理按钮控件

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

    我有一个按钮的数组列表,我正在尝试将所有按钮设置为与最后一个按钮相同的大小。

    ArrayList <Button> buttons = new ArrayList<Button>();
    Composite numbersComposite = new Composite(composite, SWT.NONE);
    numbersComposite.setLayout(new GridLayout(5, true));
        
    for (int i=0; i<=49; i++) { 
        Button b = new Button(numbersComposite, SWT.TOGGLE);
        b.setText(""+i);
        buttons.add(b);
    }
    
    for (Button b : buttons) {
        b.setSize(buttons.get(buttons.size()-1).getSize());
    }
    

    有点不对劲,因为不是所有的按钮大小都一样。切换式按钮的setSize方法有问题吗?

    我看到了 buttons.get(buttons.size()-1).getSize() 给出一个值为0,0的点。为什么?

    编辑2

    我试过这个代码,但什么都没发生!不是所有的尺寸都一样。为什么会这样?

    Point point = new Point(20, 20);
    for (Button b : buttons) {
        b.setSize(point);
    }
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   Loris Securo    6 年前

    你把布局和绝对定位混为一谈,这是行不通的。

    setSize

    如果使用布局(通常是最佳选择),则应为要显示的组件设置适当的布局数据。

    GridLayout 为了父母 Composite ,其子对象应设置为 GridData 网格数据 混合成的 :

    for (int i = 0; i <= 49; i++) {
        Button b = new Button(numbersComposite, SWT.TOGGLE);
    
        // set the layout data
        GridData buttonLayoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
        b.setLayoutData(buttonLayoutData);
    
        b.setText("" + i);
        buttons.add(b);
    }
    

    查看此处了解更多有关SWT中布局的信息: http://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.html