java - 在没有事件的情况下获取鼠标左键状态

标签 java swing

将对话框移动到不同的屏幕时,我需要缩放对话框。由于缩放所有组件的成本相当高,因此我只想在对话框移动到新位置时执行一次。

所以我使用了一个计时器,它会随着每个传入的 componentMoved 事件而重新启动,以了解对话框何时停止移动。只要在停止对话框时释放鼠标,这种方法就很有效。

如果对话框停止移动并且仍按下鼠标,则缩放有效。但是,当我释放鼠标时,我的 L&F 引擎会将对话框大小调整为之前的大小,这非常不方便。

我尝试了 pack(),手动设置大小(我知道,不好的做法),我在缩放之前尝试了 setVisible(false)setVisible(true) ) 之后,但只要按下鼠标,我的 L&F 引擎就会将对话框的大小调整为之前的大小。

遗憾的是,所有与 titleBar 相关的 MouseEvent 都被引擎吞没了,所以我不能简单地使用 mouseReleased 事件来触发缩放。

这就是为什么我需要找出鼠标是否仍然被按下而不必使用事件。有什么办法吗? JNI 不知何故?

我无法展示示例,因为没有 L&F 引擎,它可以正常工作。不使用它也不是一个选择。

最佳答案

我认为,你应该使用ComponentListener 。当窗口大小更改时,布局管理器必须触发重新布局,并且组件大小必须更改。

此外,出于调试目的,您可以使用 AWTEventListener 来获取 UI 中引发的所有事件。

Toolkit.getDefaultToolkit().addAWTEventListener(...);

setting the size manually (I know, bad practice)

这不是一个坏习惯。特别是当您想恢复窗口以前的大小时。 pack()只是首选方式。

关于java - 在没有事件的情况下获取鼠标左键状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46031141/

相关文章:

java - 刷新JTable firetableDataChanged未执行

java - if 语句无法过滤空名称

java - 专门针对gwt代码的代码分析器?

java - 在循环中创建的按钮在单击时都会执行相同的操作

java - 在 Java 桌面聊天应用程序中混合使用 Swing 和 JavaFX

java - 是否可以指向特定的 JPanel

Java String For循环不读取if语句

用于绘制 map 的 Java 库?

java - 具有大型二进制数据的 Hessian (java)

java - 将对象保存在 JTree 中但更改显示的名称(java swing)?