当前位置: 代码迷 >> java >> 添加新组件时的“更新(和增长)”对话框
  详细解决方案

添加新组件时的“更新(和增长)”对话框

热度:84   发布时间:2023-07-27 09:36:36.0

我有JDialog窗口,用户可以在其中使用“ +”旋钮手动添加组件。

我希望每次添加后自动调整窗口大小。

pack()在设置对话框可见之前起作用。 但是它已经可见,并且不会更改窗口尺寸。

有没有替代/补充的方式pack()

亲切的问候,

有没有替代/补充的方式pack()?

不,请使用pack()因为这是唯一的调用,它不仅会重新布局组件,而且还会调整包含的顶级窗口(此处为JDialog)的大小。

但是它已经可见,并且不会更改窗口尺寸。

窗口是否已可见并不重要。 如果在可视化的顶级窗口 (如果为大pack()上调用pack() ,则在您的GUI正确使用布局管理器的情况下, 它将更改窗口的尺寸。 如果未更改您的代码,则可能您未在正确的引用上调用此方法,或者未以良好的方式使用布局,在这种情况下,您将需要向我们展示相关代码。

您的问题提出了另一个问题-为什么不使用pack() 如果是因为正在对JDialog保留的JPanel进行更改,那么您始终可以使用SwingUtilities.getWindowAncestor(Component c)来获取对话框或任何包含JPanel(或任何组件)的顶级窗口。

由于JScrollPane是该包的“问题”,因此我让pack()计算所有内容。 如果JScrollPane内部的面板大于滚动窗格且尺寸仍然合理,则我将JDialog强制设置为更大的尺寸:

pack();

Dimension dimPanels = panObjects.getSize();
Dimension dimWindow = this.getSize();
Dimension dimScroll = jScrollPane1.getSize();

int targetHeight = dimPanels.height - dimScroll.height + dimWindow.height;

if ((dimPanels.height > dimScroll.height) && (targetHeight < MAX_WINDOW_HEIGHT)) {
    this.setSize(dimWindow.width, targetHeight);
    validate();
}
else if (targetHeight > MAX_WINDOW_HEIGHT) {
    this.setSize(dimWindow.width, MAX_WINDOW_HEIGHT);
    validate();
}
  相关解决方案