Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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_Image_Swing_Mouse - Fatal编程技术网

Java拖动图像更好&;重叠图像检测

Java拖动图像更好&;重叠图像检测,java,image,swing,mouse,Java,Image,Swing,Mouse,我有两个问题要问你: [已解决]-在java中,我能够使用鼠标侦听器在图像周围移动。如果我单击鼠标并向上移动,它只会向上移动图像,而不是将图像移动到我的指针所在的位置。不要让图像跳到鼠标指针所在的位置 [已解决]-由于我正在构建一个编辑器,如果我在窗口上有多个图像,您可以四处移动,如果有两个重叠的图像,我如何检测实际移动的图像。如果我想移动图像后面的一个,而不是前面的一个,或者反之亦然,会发生什么。你们在这里做的最好的方法是什么 一些与这两个问题相关的代码 addMouseMotionListe

我有两个问题要问你:

  • [已解决]-在java中,我能够使用鼠标侦听器在图像周围移动。如果我单击鼠标并向上移动,它只会向上移动图像,而不是将图像移动到我的指针所在的位置。不要让图像跳到鼠标指针所在的位置

  • [已解决]-由于我正在构建一个编辑器,如果我在窗口上有多个图像,您可以四处移动,如果有两个重叠的图像,我如何检测实际移动的图像。如果我想移动图像后面的一个,而不是前面的一个,或者反之亦然,会发生什么。你们在这里做的最好的方法是什么

  • 一些与这两个问题相关的代码

    addMouseMotionListener(new MouseMotionListener() {
    
            @Override
            public void mouseMoved(MouseEvent arg0) {
                // TODO Auto-generated method stub
            }
    
            @Override
            public void mouseDragged(MouseEvent arg0) {
                // TODO Auto-generated method stub
                //use this
                if(curObj != null){
    
                    Point p = arg0.getPoint();
    
                    curObj.pos.x = p.x;
                    curObj.pos.y = p.y;
    
                    ......
                }
            }
        });
    
    
    addMouseListener(new MouseListener() {
    
            @Override
            public void mouseReleased(MouseEvent arg0) {
                // TODO Auto-generated method stub
            }
    
            @Override
            public void mousePressed(MouseEvent arg0) {
                // TODO Auto-generated method stub
                //right now find the first one that contains the mouse.
                //later we can make it so they have an option to pick on that overlaps.
    
                Point p = arg0.getPoint();
                SwingUtilities.convertPoint(Main.gui, p, instance);
    
                                ....
    
                                //this is the code to detect which image to use
                curObj = null;
                for(int i = 0; i < objects.size(); i++){
                    StepObject obj = objects.get(i);
                    if(obj.isDraggable()){
                        if(p.x >= obj.pos.x && p.y >= obj.pos.y &&
                           p.x <= (obj.pos.x + obj.getWidth()) && p.y <= (obj.pos.y + obj.getHeight())){
                            curObj = obj;
                            break;
                        }
                    }
                }
    
                .....
    
            }
    
            @Override
            public void mouseExited(MouseEvent arg0) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void mouseEntered(MouseEvent arg0) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void mouseClicked(MouseEvent arg0) {
                // TODO Auto-generated method stub
    
            }
        });
    
    addMouseMotionListener(新的MouseMotionListener(){
    @凌驾
    public void mouseMoved(MouseEvent arg0){
    //TODO自动生成的方法存根
    }
    @凌驾
    公共无效鼠标标记(鼠标事件arg0){
    //TODO自动生成的方法存根
    //用这个
    如果(curObj!=null){
    点p=arg0.getPoint();
    curObj.pos.x=p.x;
    curObj.pos.y=p.y;
    ......
    }
    }
    });
    addMouseListener(新MouseListener(){
    @凌驾
    公共无效MouseEvent arg0{
    //TODO自动生成的方法存根
    }
    @凌驾
    public void mousePressed(MouseEvent arg0){
    //TODO自动生成的方法存根
    //现在找到第一个包含鼠标的。
    //以后我们可以这样做,这样他们就可以选择重叠。
    点p=arg0.getPoint();
    convertPoint(Main.gui,p,instance);
    ....
    //这是检测要使用哪个图像的代码
    curObj=null;
    对于(int i=0;i=obj.pos.x&&p.y>=obj.pos.y&&
    
    p、 x一种解决方案是我如何为一个棋盘解决这个问题的。棋盘由一个网格组成,每个网格可以容纳一个或0个jlabel(可以容纳带有图像的棋子)。如果我单击持有JLabel的JPanel,JLabel将被踢到顶层窗口的玻璃窗格上,然后用鼠标拖动。释放鼠标时,鼠标侦听器会检测到我所在网格的JPanel,国际象棋引擎会确定这是否是有效的移动,如果是,JLabel将被添加到JPanel中,并显示鼠标光标结束。如果没有,JLabel将返回到其原始JPanel。JPanel使用GridBagLayout,因此,如果添加了JLabel,它将显示在JPanel单元格的中央。

    一种解决方案是我如何解决棋盘的问题。棋盘由一个JPanel网格组成,每个JPanel可以容纳一个或0个JLabel(拿着有图像的棋子)。如果我单击持有JLabel的JPanel,JLabel将被踢到顶层窗口的玻璃窗格上,然后用鼠标拖动。释放鼠标时,鼠标侦听器会检测到我所在网格的JPanel,国际象棋引擎会确定这是否是有效的移动,如果是,JLabel将被添加到JPanel中,并显示鼠标光标如果没有,JLabel将返回到其原始JPanel。JPanel使用GridBagLayout,因此如果向其中添加JLabel,它将显示在JPanel单元格的中心

    我实际上是在使用
    图形
    来绘制图像

    这是一个用户界面问题,可以追溯到最早的、广泛使用的情况。常用的方法是实现两个基本操作,使用户可以通过更改隐藏对象的渲染顺序来公开隐藏对象:

    • 向后移动:按z顺序将选定内容向后移动一步
    • 向后移动:将选择移动到z顺序的后面
    通常包括两个互补操作:

    • 向前移动:按z顺序将选择向前移动一步
    • 向前移动:将选择移动到z顺序的前面

    说明了JAVA 2D中的命中测试和处理多个选择的几种技术,它说明了至少一些对象是可见的更简单的情况。它的绘制顺序是用一个简单的<代码>列表> />代码>使用<代码> ARARYLIST/java >,这对于重新排序不是理想的;考虑<代码>链接目录> /COD>

    列表
    接口的替代实现

    我实际上是在使用
    图形
    来绘制图像

    这是一个用户界面问题,可以追溯到最早的、广泛使用的情况。常用的方法是实现两个基本操作,使用户可以通过更改隐藏对象的渲染顺序来公开隐藏对象:

    • 向后移动:按z顺序将选定内容向后移动一步
    • 向后移动:将选择移动到z顺序的后面
    通常包括两个互补操作:

    • 向前移动:按z顺序将选择向前移动一步
    • 向前移动:将选择移动到z顺序的前面

    说明了JAVA 2D中的命中测试和处理多个选择的几种技术,它说明了至少一些对象是可见的更简单的情况。它的绘制顺序是用一个简单的<代码>列表> />代码>使用<代码> ARARYLIST/java >,这对于重新排序不是理想的;考虑<代码>链接目录> /COD>

    列表
    界面的替代实现。

    感谢您的回复。这很有趣。但是,我没有使用JLabel或布局。我实际上是使用图形绘制图像。因此,这种类型的解决方案是o