gpt4 book ai didi

java - 在用户拖动鼠标时收听 JFrame 调整大小事件?

转载 作者:IT老高 更新时间:2023-10-28 21:05:46 26 4
gpt4 key购买 nike

当用户单击 JFrame 的角以调整大小并拖动鼠标时,JFrame 在用户拖动时根据鼠标的当前位置重绘。你怎么能听到这些事件?

以下是我目前尝试过的:

public final class TestFrame extends JFrame {
public TestFrame() {
this.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
// This is only called when the user releases the mouse button.
System.out.println("componentResized");
}
});
}

// These methods do not appear to be called at all when a JFrame
// is being resized.
@Override
public void setSize(int width, int height) {
System.out.println("setSize");
}

@Override
public void setBounds(Rectangle r) {
System.out.println("setBounds A");
}

@Override
public void setBounds(int x, int y, int width, int height) {
System.out.println("setBounds B");
}
}

当用户在鼠标周围拖动时,如何确定和限制用户如何调整窗口大小(基于窗口的当前纵横比)?

最佳答案

你可以添加一个组件监听器并像这样实现 componentResized 函数:

JFrame component = new JFrame("My Frame");

component.addComponentListener(new ComponentAdapter()
{
public void componentResized(ComponentEvent evt) {
Component c = (Component)evt.getSource();
//........
}
});

编辑: 显然,对于 JFrame,componentResized 事件与 mouseReleased 事件 Hook 。这就是释放鼠标按钮时调用该方法的原因。

实现您想要的一种方法是添加一个 JPanel,它将覆盖您的 JFrame 的整个区域。然后将 componentListener 添加到 JPanel(即使您的鼠标仍在拖动,也会调用 JPanel 的 componentResized)。当您的框架调整大小时,您的面板也将调整大小。

我知道,这不是最优雅的解决方案,但它确实有效!

关于java - 在用户拖动鼠标时收听 JFrame 调整大小事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2106367/

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