gpt4 book ai didi

java - 等宽窗扇

转载 作者:行者123 更新时间:2023-12-03 02:59:37 25 4
gpt4 key购买 nike

我的应用程序有一个带有两个子项的 SashForm。我希望在调整窗口大小时左 child 保持相同的大小。我想要 Eclipse 对 Package Explorer 和主编辑器做同样的事情。当您调整窗口大小时,只有文本编辑器会更改大小。但是,Package Explorer 仍然可以通过窗框调整大小。

我尝试使用以下内容

sashForm.addControlListener(new ControlAdapter() {
@Override
public void controlResized(ControlEvent e) {
int width = sashForm.getClientArea().width;
int[] weights = sashForm.getWeights();
weights[1] = width - weights[0];
sashForm.setWeights(weights);
}
});

问题是左侧尺寸的宽度要么缩小到 0,要么扩大太多。看起来权重在调用之前已经更新了。

如果我将权重[0]设置为等于某个常量,它就会达到我想要的效果。

最佳答案

我设法运行了一个示例,它应该可以让您了解如何解决您的问题。问题是,SashForm 使用权重而不是像素。因此,您必须根据父级大小计算左子级必须占据的百分比,并将其余的分配给右子级。

在我的代码示例中,您可以指定左子元素的宽度并为右子元素设置最小尺寸,这样 SashForm 将始终显示两者。

private static final int MIN_WIDTH_LEFT = 100;
private static final int MIN_WIDTH_RIGHT = 50;

public static void main(String[] args)
{
Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new FillLayout());

final SashForm form = new SashForm(shell, SWT.HORIZONTAL);

Button button = new Button(form, SWT.PUSH);
button.setText("Left");

Button buttonR = new Button(form, SWT.PUSH);
buttonR.setText("Right");

form.setWeights(new int[] {1, 2});

shell.addListener(SWT.Resize, new Listener()
{
@Override
public void handleEvent(Event arg0)
{
int width = shell.getClientArea().width;
int[] weights = form.getWeights();

if(width >= MIN_WIDTH_LEFT + MIN_WIDTH_RIGHT)
{
weights[0] = 1000000 * MIN_WIDTH_LEFT / width;
weights[1] = 1000000 - weights[0];
}
else
{
weights[0] = 1000000 * MIN_WIDTH_LEFT / (MIN_WIDTH_LEFT + MIN_WIDTH_RIGHT);
weights[1] = 1000000 * MIN_WIDTH_RIGHT / (MIN_WIDTH_LEFT + MIN_WIDTH_RIGHT);
}

System.out.println(width + " " + Arrays.toString(weights));

form.setWeights(weights);
}
});

shell.pack();

shell.setSize(600, 400);
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}

这就是它的样子:

启动:

enter image description here

调整大小后:

enter image description here

当减小窗口尺寸直到它太小而无法显示两个最小尺寸时:

enter image description here

正如您在本例中所看到的,左侧子级的最小尺寸将被忽略,以便仍然能够显示两个子级。

关于java - 等宽窗扇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17227086/

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