gpt4 book ai didi

java - java中有限制组件只能在Frame中移动的功能吗?

转载 作者:行者123 更新时间:2023-12-02 09:52:42 26 4
gpt4 key购买 nike

我试图找到将组件的可移动区域限制在框架内部的API。有这样的API吗?

我猜这个函数位于JFrame的类别中。但其实Swing组件制作的东西也差不多。我也搜索了SwingUtilities的API,但我认为没有与我的问题相关的有用的API。

public void mouseDragged(MouseEvent arg0) {
// TODO Auto-generated method stub
Point MousePoint=arg0.getPoint();
label.setBounds(0, 0, c.getWidth(), c.getHeight());
label.setLocation(MousePoint);
}
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
label.setBounds(0, 0, c.getWidth(), c.getHeight());
label.setLocation(getLocationOnScreen());
}

我预计使用 setBounds() 会限制 Frame 中的可移动区域。但是当我将标签拖动到框架区域上时,发现标签随之移动。

最佳答案

通常,您会向 label 添加一个 ComponentListener 并实现 componentMoved 方法。

在该方法中,您可以添加检查,检查组件是否仍在边界内并相应地设置位置:

label.addComponentListener(new ComponentAdapter() {
@Override
public void componentMoved(ComponentEvent e) {
int newX = label.getX();
int newY = label.getY();

if(label.getX() < 0) {
newX = 0;
} else if(label.getX() + label.getWidth() > contentPane.getWidth()) {
newX = contentPane.getWidth() - label.getWidth();
}

if(label.getY() < 0) {
newY = 0;
} else if(label.getY() + label.getHeight() > contentPane.getHeight()) {
newY = contentPane.getHeight() - label.getHeight();
}

label.setLocation(newX, newY);
}
});

这个解决方案对我来说效果很好!

关于java - java中有限制组件只能在Frame中移动的功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56204449/

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