gpt4 book ai didi

java - 等待 JFrame 加载后再继续?

转载 作者:行者123 更新时间:2023-12-01 13:29:31 25 4
gpt4 key购买 nike

我有一个 JFrame,其中包含两个嵌套的 JSplitPane。我希望它们在启动时设置为精确的比例。

我无法使用setDividerLocation(int)因为我还不知道框架的大小(我在启动时将其最大化)。所以,我使用比例版本,setDividerLocation(double) .

代码:

// ...
JSplitPane left = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
JSplitPane right = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
right.setResizeWeight(1); // So that I can move the dividers independently
left.setLeftComponent(scrollPane1);
right.setLeftComponent(scrollPane2);
right.setRightComponent(scrollPane3);
left.setRightComponent(right);
add(left, BorderLayout.CENTER);
add(statusLabel, BorderLayout.PAGE_END);
setVisible(true);
setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);
left.setDividerLocation(0.3);
right.setDividerLocation(0.7);
// ...

现在,有时这工作得很好,但有时它不会改变分隔线。我相信这是因为框架未加载到屏幕上。来自 setDividerLocation(double) 文档:

If the split pane is not correctly realized and on screen, this method will have no effect (new divider location will become (current size * proportionalLocation) which is 0).

有没有办法等到框架“在屏幕上”?这可能大约是几毫秒,但它仍然会破坏启动时的布局。我不想将 Thread.sleep 与固定值一起使用,而是使用某种与 Swing 配合使用的方式。

编辑:我尝试了 hack Behe建议。它不起作用,所以可能与时间无关。

编辑2:我调试了更多。看来这是由于我的调整大小权重设置为 1 造成的。但是这是我的布局所必需的。

最佳答案

我找到了办法。我向内部 JSplitPane 添加了一个 ComponentListener,当框架最大化而调整其大小时,它会通知我。当发生这种情况时,我可以安全地设置调整大小权重。

final JSplitPane left = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
final JSplitPane right = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
left.setDividerLocation(0.3);
right.setDividerLocation(0.3);
left.setLeftComponent(scrollPane1);
right.setLeftComponent(scrollPane2);
right.setRightComponent(scrollPane3);
left.setRightComponent(right);
add(left, BorderLayout.CENTER);
add(status, BorderLayout.PAGE_END);
setVisible(true);
right.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
right.setResizeWeight(1);
}
});
setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);

关于java - 等待 JFrame 加载后再继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21648885/

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