如何设置SashForm子项的默认大小

时间:2013-08-20 18:41:29

标签: java forms resize widget swt

我有一个SashForm,目标只是制作一个有两个孩子的表格:

  • 一张桌子
  • 用于在桌面上执行操作的侧边菜单

宽度可以调整,但我想设置一个美学上令人愉悦的默认值。

我希望表格在加载表格时大于侧边菜单,比如75:25比例(目前比例是50:50,这使得侧边菜单太大了)。

我已经尽力让孩子们改变体型,但他们根本不会做任何事情。我添加了布局,我使用了绝对定位,我在每种情况下玩弄了许多不同的测试值。我一遍又一遍地看着它,但这没用。无论我做什么,我似乎都无法影响这个小部件的状态,甚至无法弄清问题是什么。

    shell.setLayout(new FillLayout()); //stretch the form to fill the window
    sf = new SashForm(shell, SWT.NONE);
    GridLayout gl = new GridLayout(2,false);

    sf.setLayout(gl);

    fillComp = new Composite(sf, SWT.NONE);   //child 1: spreadsheet data
    opComp = new Composite (sf, SWT.BORDER);  //child 2: user operation panel
    opComp.setLayout(new FillLayout());

    GridData gd1 = new GridData(
            2, //test values - could be 200000 and it wouldn't make a difference
            2  //
            );

    GridData gd2 = new GridData(
            1, //test values
            1  //
            );


    //gd1.horizontalSpan = 2;  //blablabla
    //gd2.horizontalSpan = 1;  //all do nothing
    //gd1.minimumWidth = 600;    //tested a variety of variables, setting them
    //gd2.minimumWidth = 200;    //to a variety of values

    fillComp.setLayoutData(gd1);
    opComp.setLayoutData(gd2);

    sf.pack();        //these do nothing
    fillComp.pack();  //
    opComp.pack();    //

我有一个监听器附加到fillComp,在事件中,它激活了这个:

    try {
        displayTable.setBounds(fillComp.getClientArea());
    } catch (Exception ex) { }

可以删除侦听器,它不会影响两个小部件的宽度。

我可以发布六个不同的代码块,所有这些代码块甚至都无法使布局发生任何变化。我可以更改父级的布局,但这只会使这种布局更小但仍然完全不可改变。

如果可以,请提供见解。我已经阅读了所有教程和代码片段,但绝对没有什么能对这个特定的小部件产生影响。

P.S。这给出了一个错误:

sf.setWeights(new int[] { 3, 1 });
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Argument not valid

1 个答案:

答案 0 :(得分:-2)

sf.setWeights()中int []的元素总和应该等于100, 在你的例子中它应该是{75,25}