java - 实时监听JFrame高宽

标签 java swing resize jframe mouselistener

我遇到过这样一种情况,我希望能够在用户拖动鼠标调整框架大小时了解 JFrame 的高度和宽度。

我对此进行了研究,以下问题提供的答案对我有一点帮助,但并非全部:Listen to JFrame resize events as the user drags their mouse?

我的问题是:我已经让我的“HSFrame”类扩展了 JFrame 并实现了 ActionListener、MouseMotionListener(但是,ActionListener 与这个问题无关)。这个问题涉及的是 MouseMotionListener。

我有一个名为“CanvasPanel”的单独类,它扩展了 JPanel——这是我使用图形对象通过绘制字符串来更新实时信息的地方。

public void mouseMoved(MouseEvent e)
{
}

public void mouseDragged(MouseEvent e)
{
    validate();
    canvas.repaint();
}

这是我的“HSFrame”类(扩展 JFrame,实现 MouseMotionListener)的代码摘录。在此代码示例中,“canvas”是一个 CanvasPanel 对象,每当调用 MouseDragged 时,我都会调用它的 repaint() 方法。

我选择使用 MouseMotionListener,因为这(据说)会给我实时更新,而不是 ComponentListener 的 componentResized() 方法(与 MouseReleased 绑定(bind))。

当我从左上角调整框架大小时,一切都会 100% 完美更新。高度、宽度、X 和 Y 值都完美重绘。

但是当我从右下角调整大小时,它不会实时更新。我不了解你,但我更喜欢从右下角调整大小。

在“CanvasPanel”类本身中,我扩展了 ComponentListener 并向那里的“HSFrame”对象添加了一个监听器——它不会实时更新,这很好,但它会在释放鼠标,无论 HSFrame 调整到哪个角。

主要问题: 是否可以让 MouseMostionListener 知道我正在从右下角调整 JFrame 的大小?当我通过单击并拖动标题栏来移动框架时它会听到,当我从左上角调整大小时(它也与标题栏交互)它会听到。它只是听不到 JFrame 的其他边界发生什么。

最佳答案

您不必使用鼠标来执行此操作!简单的方法: 写一个component listener .有HSFrame工具ComponentListener并将调整大小的代码放入 public void componentResized(ComponentEvent e)

我认为 mouseListener 不起作用,因为当您从右下角拖动鼠标时,您的鼠标不在 JFrame 中,因此事件监听器不会拾取它。

关于java - 实时监听JFrame高宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8650596/

相关文章:

jquery - 调整父菜单jquery的大小?

macos - NSTextField sizeToFit 或框架更新将文本向左移动

java - addMarker Google map 选项未显示

java - 如何使用 Cassandra 数据库对用户进行身份验证

java - 如何用 GlazedList 中的字符串替换 JTextField 作为过滤器?

java - 切换表格列以输入数据

java - 我们可以通过 neoremind 从 SshXCute 执行 telnet

java - 如何在 libGDX 的纹理对象中写入文本

java - JMenuBar找不到符号错误

java - 在调整大小之前计算调整大小的图像(例如 JPEG)的文件大小