Java 的 SWT:设置组的大小隐藏其小部件
Java's SWT: Setting the size of Group hides its widgets
我想在 GridLayout 中设置一个带有一些小部件的组。
我还希望组组件的大小为固定大小 (250x250),并希望其上的小部件能够容纳(在其内部均匀分布在两列中)。
但是当我设置组的大小时,它隐藏了它的小部件。
考虑一下:
public class Gui {
public static void main(String[] args) {
Gui g=new Gui();
g.run();
}
private Shell shell;
private Display display;
private ChartComposite composite;
public Gui() {
display=new Display();
shell=new Shell(display);
shell.setSize(500, 500);
Group group=new Group(shell, SWT.NONE);
group.setText("Group");
group.setSize(250,250); // this causes trouble
GridLayout group_layout=new GridLayout();
group_layout.numColumns=2;
group_layout.marginBottom=10;
group_layout.marginTop=10;
group.setLayout(group_layout);
Button b1=new Button(group, SWT.PUSH);
b1.setText("Button1");
Button b2=new Button(group, SWT.PUSH);
b2.setText("Button2");
Button b3=new Button(group, SWT.PUSH);
b3.setText("Button3");
Button b4=new Button(group, SWT.PUSH);
b4.setText("Button4");
}
public void run() {
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
输出:
但是现在看看当我将调用重新定位到 setSize()
时会发生什么:
public class Gui {
public static void main(String[] args) {
Gui g=new Gui();
g.run();
}
private Shell shell;
private Display display;
private ChartComposite composite;
public Gui() {
display=new Display();
shell=new Shell(display);
shell.setSize(500, 500);
Group group=new Group(shell, SWT.NONE);
group.setText("Group");
GridLayout group_layout=new GridLayout();
group_layout.numColumns=2;
group_layout.marginBottom=10;
group_layout.marginTop=10;
group.setLayout(group_layout);
Button b1=new Button(group, SWT.PUSH);
b1.setText("Button1");
Button b2=new Button(group, SWT.PUSH);
b2.setText("Button2");
Button b3=new Button(group, SWT.PUSH);
b3.setText("Button3");
Button b4=new Button(group, SWT.PUSH);
b4.setText("Button4");
group.setSize(250,250); // relocated
}
public void run() {
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
输出:
有人对此行为有解释吗?
正如我提到的,在添加小部件之前我需要组的大小为 (250x250),这样它们才能适当地容纳,但我无法完成此操作如果 setSize()
隐藏了我的小部件。
通过调用组合的 layout()
方法计算和应用布局。在您的第一个片段中,这从未完成。调整复合材料的大小也会触发重新布局。这就是为什么在第二个代码段中调用 setSize()
会触发布局。它在您的第一个代码段中不起作用,因为在您调用 setSize()
.
时尚未设置 GridLayout
除了延迟 setSize()
调用外,您还可以在设置布局并创建所有子项后调用 group.layout()
。
在仅使用布局而非绝对定位的 UI 中,对 shell.pack()
的一次调用将递归触发所有布局。
我想在 GridLayout 中设置一个带有一些小部件的组。
我还希望组组件的大小为固定大小 (250x250),并希望其上的小部件能够容纳(在其内部均匀分布在两列中)。
但是当我设置组的大小时,它隐藏了它的小部件。
考虑一下:
public class Gui {
public static void main(String[] args) {
Gui g=new Gui();
g.run();
}
private Shell shell;
private Display display;
private ChartComposite composite;
public Gui() {
display=new Display();
shell=new Shell(display);
shell.setSize(500, 500);
Group group=new Group(shell, SWT.NONE);
group.setText("Group");
group.setSize(250,250); // this causes trouble
GridLayout group_layout=new GridLayout();
group_layout.numColumns=2;
group_layout.marginBottom=10;
group_layout.marginTop=10;
group.setLayout(group_layout);
Button b1=new Button(group, SWT.PUSH);
b1.setText("Button1");
Button b2=new Button(group, SWT.PUSH);
b2.setText("Button2");
Button b3=new Button(group, SWT.PUSH);
b3.setText("Button3");
Button b4=new Button(group, SWT.PUSH);
b4.setText("Button4");
}
public void run() {
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
输出:
但是现在看看当我将调用重新定位到 setSize()
时会发生什么:
public class Gui {
public static void main(String[] args) {
Gui g=new Gui();
g.run();
}
private Shell shell;
private Display display;
private ChartComposite composite;
public Gui() {
display=new Display();
shell=new Shell(display);
shell.setSize(500, 500);
Group group=new Group(shell, SWT.NONE);
group.setText("Group");
GridLayout group_layout=new GridLayout();
group_layout.numColumns=2;
group_layout.marginBottom=10;
group_layout.marginTop=10;
group.setLayout(group_layout);
Button b1=new Button(group, SWT.PUSH);
b1.setText("Button1");
Button b2=new Button(group, SWT.PUSH);
b2.setText("Button2");
Button b3=new Button(group, SWT.PUSH);
b3.setText("Button3");
Button b4=new Button(group, SWT.PUSH);
b4.setText("Button4");
group.setSize(250,250); // relocated
}
public void run() {
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
输出:
有人对此行为有解释吗?
正如我提到的,在添加小部件之前我需要组的大小为 (250x250),这样它们才能适当地容纳,但我无法完成此操作如果 setSize()
隐藏了我的小部件。
通过调用组合的 layout()
方法计算和应用布局。在您的第一个片段中,这从未完成。调整复合材料的大小也会触发重新布局。这就是为什么在第二个代码段中调用 setSize()
会触发布局。它在您的第一个代码段中不起作用,因为在您调用 setSize()
.
除了延迟 setSize()
调用外,您还可以在设置布局并创建所有子项后调用 group.layout()
。
在仅使用布局而非绝对定位的 UI 中,对 shell.pack()
的一次调用将递归触发所有布局。