Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 拖动时限制鼠标移动_Java_Dialog_Mouseevent - Fatal编程技术网

Java 拖动时限制鼠标移动

Java 拖动时限制鼠标移动,java,dialog,mouseevent,Java,Dialog,Mouseevent,因此,我创建了一个JDialog,并将其编程为在拖动时移动 通过在程序开始时设置此选项; 点=新点 int xMouse; int yMouse; int x; int y; Dimension scrnSize = Toolkit.getDefaultToolkit().getScreenSize(); Rectangle winSize = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();

因此,我创建了一个JDialog,并将其编程为在拖动时移动 通过在程序开始时设置此选项; 点=新点

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);
    }
}
正如你所看到的,我已经试着让它,当你试图拖动框出屏幕时,它失败了。但这真的是相当多的车,它有时会在屏幕结束前停止,并阻碍屏幕边缘附近的移动。更不用说,尽管对话框停止移动,但鼠标仍在移动


因此,我想知道是否有其他方法可以创建某种边界,当鼠标试图拖动对话框时,必须在其内部进行操作。

要限制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);
            }
        }); 
    }
}
本例将位置设置为一个固定点,以演示该方法的工作方式。在实际程序中,您应该将对话框移动到屏幕内最近的点。此外,如果您想将鼠标“锁定”到位,可以查看Robot类以编程方式发出鼠标移动