gpt4 book ai didi

Java的SWT : Setting the size of Group hides its widgets

转载 作者:行者123 更新时间:2023-11-30 08:10:53 25 4
gpt4 key购买 nike

我想在 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();
}
}

输出:

enter image description here

但是现在看看当我将调用重新定位到 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();
}
}

输出:

enter image description here

有人对这种行为有解释吗?

正如我所提到的,在添加小部件之前,我需要将组的大小设置为 (250x250),以便它们能够适当容纳,如果 setSize 我无法完成此操作() 隐藏我的小部件。

最佳答案

布局是通过调用组合的 layout() 方法来计算和应用的。在您的第一个片段中,这从未完成。调整组合的大小也会触发重新布局。这就是为什么在第二个代码段中调用 setSize() 会触发布局。它在您的第一个代码片段中不起作用,因为当您调用 setSize() 时,GridLayout 尚未设置。

您也可以在设置布局并创建所有子项之后调用 group.layout(),而不是推迟 setSize() 调用。

在仅使用布局而不是绝对定位的 UI 中,对 shell.pack() 的单次调用将递归地触发所有布局。

关于Java的SWT : Setting the size of Group hides its widgets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30397916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com