Java 组件调整大小 - 检测用户是否调整了窗口大小或以编程方式调整了窗口大小

标签 java swing resize componentlistener

我有一个 JFrame,在其中删除和添加组件,每次执行此操作时,我都会相应地调整框架的大小。我添加了一个组件监听器,但当然它会由用户调整窗口大小以及我的 setSize() 方法触发。
有没有办法从 ComponentEvent 中查看是用户调整了窗口大小还是我通过 setSize() 调整了窗口大小?
我发现的可能的解决方案是:
1. 使用一个标志 - boolean 调整大小 - 我在 setSize() 之前将其设置为 true,之后设置为 false。
2. 添加mouseDragged监听器并比较拖动前后的大小。
第二个绝对不是一个好的选择。第一个可以工作,但我想知道是否可以以简单的方式找到用户是否是调整窗口大小的人。

最佳答案

I resize the frame accordingly

使用 pack() 有什么问题吗?

I remove and add components and each time I do this,

那么您应该在此处设置 boolean 值:

programResize == true:
panel.add(...);
frame.setSize(...); // this should cause the ComponentListener to fire
// the ComponentListener would then use programResize == false;

或者更好的选择可能是:

component.removeComponentListener(...);
panel.add(...);
frame.setSize(...);
component.addComponentListener(...);

我更喜欢这种方法,因为基于手动更新的所有逻辑都是自包含在一个地方,并且不需要定义 boolean 变量。

关于Java 组件调整大小 - 检测用户是否调整了窗口大小或以编程方式调整了窗口大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15966223/

相关文章:

java - 相机预览中出现绿色线条

java - 为 ExecutorService invokeAll() 创建包装器

java - Jasper 报告 - 使用 BLOB 作为详细信息字段时出现 java.lang.ClassNotFoundException : oracle. jdbc.OracleBlob

java - 如何在 Java 中的 GridLayout 面板的特定单元格中添加标签?

android - 在图像比例android上调整IMAGEVIEW的大小

java - 在控制台中监控 google app engine cron 作业?

java - JLayeredPane 没有在顶部添加 View

java - JTable 与自定义 TableModel

c# - 在显示我的 C# Windows 窗体时关闭 'Show window contents while dragging' 设置

WinForms - 调整大小事件后的操作