我有一个SashForm
,目标只是制作一个有2个孩子的表格:
一张桌子
在桌子上执行操作的侧面菜单
宽度可以调整,但我想设置一个美观的默认值。
我希望表格在加载表单时大于侧面菜单,例如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) { }
侦听器可以删除,并且不会影响两个小部件的宽度。
我可以发布六个不同的代码块,所有这些代码块甚至都没有丝毫改变布局。我可以更改父级的布局,但这只会使该布局小得多,但仍然相当不变。
请提供您的见解。我已经阅读了所有教程和代码片段,但绝对没有什么与这个特定的小部件有所不同。
附言这给出了一个错误:
sf.setWeights(new int[] { 3, 1 });
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Argument not valid
最佳答案
sf.setWeights()中int []的元素之和应等于100,
在您的示例中,应为{75,25}
关于java - 如何设置SashForm子级的默认大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18342681/