当用户单击 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();
//........
}
});
EDIT:显然,对于 JFrame,componentResized 事件与 mouseReleased 事件挂钩。这就是释放鼠标按钮时调用该方法的原因。
实现您想要的效果的一种方法是添加一个覆盖 JFrame 整个区域的 JPanel。然后将 componentListener 添加到 JPanel(即使您的鼠标仍在拖动,也会调用 JPanel 的 componentResized)。当您的框架调整大小时,您的面板也会调整大小。
我知道,这不是最优雅的解决方案,但它确实有效!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)