Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 如何将“框”(仅带边框的矩形)添加到JLayeredPane?_Java_User Interface_Layout_Jpanel_Jlayeredpane - Fatal编程技术网

Java 如何将“框”(仅带边框的矩形)添加到JLayeredPane?

Java 如何将“框”(仅带边框的矩形)添加到JLayeredPane?,java,user-interface,layout,jpanel,jlayeredpane,Java,User Interface,Layout,Jpanel,Jlayeredpane,我的总体目标是创建一个拼图游戏,用mousedrag在GUI屏幕上移动一组图像。我目前的问题是使这个捕捉功能,当鼠标拖动图像释放,图像将捕捉到一个预定的位置。这就是我想要创建框的地方。我想为16个拼图块创建16个框,并在释放鼠标时使用它们的坐标作为图像的捕捉位置。在益智游戏中,当你在一个普通区域悬停时,棋子是如何捕捉到正确的位置的。我试图通过制作16个JPanel来实现这一点,但我不知道这是否是明智的方式。而且,似乎我甚至不能将JPanel添加到我的JLayeredPane中。我试图为其中一个J

我的总体目标是创建一个拼图游戏,用mousedrag在GUI屏幕上移动一组图像。我目前的问题是使这个捕捉功能,当鼠标拖动图像释放,图像将捕捉到一个预定的位置。这就是我想要创建框的地方。我想为16个拼图块创建16个框,并在释放鼠标时使用它们的坐标作为图像的捕捉位置。在益智游戏中,当你在一个普通区域悬停时,棋子是如何捕捉到正确的位置的。我试图通过制作16个JPanel来实现这一点,但我不知道这是否是明智的方式。而且,似乎我甚至不能将JPanel添加到我的JLayeredPane中。我试图为其中一个JPanel设置一个边界,以帮助我查看它是否被添加,但没有添加

鼠标拖动工作正常,一切正常。我只是想能够添加一个框的某种表示,当鼠标释放图像时,图像将捕捉到框的位置。如果您对这个问题有任何见解,请告诉我

import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.File;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;


public class Gui1 {

    public static void main(String[] args) {
        new Gui1();
    }

    public Gui1() {    //Constructor for setting up the GUI
        EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
            ex.printStackTrace();
            }
            JLayeredPane pane = new JLayeredPane();
            JFrame frame = new JFrame("Testing");
            JPanel canvas1 = new JPanel();
            JPanel canvas2 = new JPanel();
            JPanel canvas3 = new JPanel();
            JPanel canvas4 = new JPanel();
            JPanel canvas5 = new JPanel();
            JPanel canvas6 = new JPanel();         
            JPanel canvas7 = new JPanel();
            JPanel canvas8 = new JPanel();
            JPanel canvas9 = new JPanel();
            JPanel canvas10 = new JPanel();
            JPanel canvas11 = new JPanel();
            JPanel canvas12 = new JPanel();
            JPanel canvas13 = new JPanel();
            JPanel canvas14 = new JPanel();
            JPanel canvas15 = new JPanel();
            JPanel canvas16 = new JPanel();
            canvas1.setPreferredSize(new Dimension(300,300));
                 canvas1.setBorder(BorderFactory.createLineBorder(Color.blue,10));      
            pane.add(canvas1, JLayeredPane.DEFAULT_LAYER);

            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new ImageGrab());
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
        });

    }
}

好的,您可以使用Box2D,因为您想要使用伪碰撞。我建议创建一个虚拟网格,可能使用java.awt.Rectangle来定义边界。您可以通过虚拟gridHmmm的getBounds方法计算片段/组件的碰撞/重叠,我将对此进行研究。再次感谢你@我尝试了很多方法来使用网格、面板、矩形等等,但似乎没有任何东西添加到GUI中。我必须将矩形添加到哪一层才能使其粘住?当我尝试将矩形添加到JFrame时,我会遇到这个错误,如何给矩形一个边框,以便我知道它在GUI上?我似乎找不到任何边界方法。