拖动时限制鼠标移动
Restrict Mouse Movement while dragging
所以我创建了一个 JDialog,我已经编程让它在我拖动它时移动
通过在程序开始时设置它;
Point point = new Point();
int xMouse;
int yMouse;
int x;
int y;
Dimension scrnSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle winSize = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
int taskBarHeight = (scrnSize.height) - (winSize.height);
int width = (scrnSize.width) - 300;
int height = (scrnSize.height) - 153 - taskBarHeight;
然后实施这个;
private void BarMousePressed(java.awt.event.MouseEvent evt) {
point.x=evt.getX();
point.y = evt.getY();
}
private void BarMouseDragged(java.awt.event.MouseEvent evt) {
Point p = getLocation();
x = p.x+evt.getX()-point.x;
y = p.y+evt.getY()-point.y;
if (x > width){}
else if (y > height){}
else if (x<(0)){}
else if (y<(0)){}
else
{
setLocation(x, y);
}
}
如您所见,我已尝试做到这一点,以便当您尝试将框拖出屏幕时失败。但这确实有很多错误,它有时会在屏幕结束前停止,并且确实阻碍了屏幕边缘附近的移动。更不用说虽然dialog不动了,但是鼠标一直在动
所以我想知道是否有任何方法可以创建某种边界,鼠标在尝试拖动对话框时必须在其中操作。
限制 JDialog
位置的方法是向其添加 ComponentListener
并在移动时检查其边界。如果您发现它在您想要的区域之外,则将其位置设置为其他点。
package main;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JDialog;
public class DialogListener {
public static void main(String[] args) throws AWTException {
final JDialog dialog = new JDialog();
dialog.setSize(300, 400);
dialog.setVisible(true);
Dimension scrnSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle winSize = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
final Rectangle screen = new Rectangle(scrnSize.width, 2*scrnSize.height - winSize.height);
dialog.addComponentListener(new ComponentAdapter() {
@Override
public void componentMoved(ComponentEvent e) {
if (!screen.contains(dialog.getBounds()))
dialog.setLocation(300, 400);
}
});
}
}
此示例将位置设置为固定点,只是为了说明该方法的工作原理。在实际程序中,您应该将对话框移动到屏幕内最近的点。另外,如果你想让鼠标 'locked' 到位,你可以看看 Robot
class 以编程方式发出鼠标移动。
所以我创建了一个 JDialog,我已经编程让它在我拖动它时移动 通过在程序开始时设置它; Point point = new Point();
int xMouse;
int yMouse;
int x;
int y;
Dimension scrnSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle winSize = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
int taskBarHeight = (scrnSize.height) - (winSize.height);
int width = (scrnSize.width) - 300;
int height = (scrnSize.height) - 153 - taskBarHeight;
然后实施这个;
private void BarMousePressed(java.awt.event.MouseEvent evt) {
point.x=evt.getX();
point.y = evt.getY();
}
private void BarMouseDragged(java.awt.event.MouseEvent evt) {
Point p = getLocation();
x = p.x+evt.getX()-point.x;
y = p.y+evt.getY()-point.y;
if (x > width){}
else if (y > height){}
else if (x<(0)){}
else if (y<(0)){}
else
{
setLocation(x, y);
}
}
如您所见,我已尝试做到这一点,以便当您尝试将框拖出屏幕时失败。但这确实有很多错误,它有时会在屏幕结束前停止,并且确实阻碍了屏幕边缘附近的移动。更不用说虽然dialog不动了,但是鼠标一直在动
所以我想知道是否有任何方法可以创建某种边界,鼠标在尝试拖动对话框时必须在其中操作。
限制 JDialog
位置的方法是向其添加 ComponentListener
并在移动时检查其边界。如果您发现它在您想要的区域之外,则将其位置设置为其他点。
package main;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JDialog;
public class DialogListener {
public static void main(String[] args) throws AWTException {
final JDialog dialog = new JDialog();
dialog.setSize(300, 400);
dialog.setVisible(true);
Dimension scrnSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle winSize = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
final Rectangle screen = new Rectangle(scrnSize.width, 2*scrnSize.height - winSize.height);
dialog.addComponentListener(new ComponentAdapter() {
@Override
public void componentMoved(ComponentEvent e) {
if (!screen.contains(dialog.getBounds()))
dialog.setLocation(300, 400);
}
});
}
}
此示例将位置设置为固定点,只是为了说明该方法的工作原理。在实际程序中,您应该将对话框移动到屏幕内最近的点。另外,如果你想让鼠标 'locked' 到位,你可以看看 Robot
class 以编程方式发出鼠标移动。