Java 如何将“框”(仅带边框的矩形)添加到JLayeredPane?
我的总体目标是创建一个拼图游戏,用mousedrag在GUI屏幕上移动一组图像。我目前的问题是使这个捕捉功能,当鼠标拖动图像释放,图像将捕捉到一个预定的位置。这就是我想要创建框的地方。我想为16个拼图块创建16个框,并在释放鼠标时使用它们的坐标作为图像的捕捉位置。在益智游戏中,当你在一个普通区域悬停时,棋子是如何捕捉到正确的位置的。我试图通过制作16个JPanel来实现这一点,但我不知道这是否是明智的方式。而且,似乎我甚至不能将JPanel添加到我的JLayeredPane中。我试图为其中一个JPanel设置一个边界,以帮助我查看它是否被添加,但没有添加 鼠标拖动工作正常,一切正常。我只是想能够添加一个框的某种表示,当鼠标释放图像时,图像将捕捉到框的位置。如果您对这个问题有任何见解,请告诉我Java 如何将“框”(仅带边框的矩形)添加到JLayeredPane?,java,user-interface,layout,jpanel,jlayeredpane,Java,User Interface,Layout,Jpanel,Jlayeredpane,我的总体目标是创建一个拼图游戏,用mousedrag在GUI屏幕上移动一组图像。我目前的问题是使这个捕捉功能,当鼠标拖动图像释放,图像将捕捉到一个预定的位置。这就是我想要创建框的地方。我想为16个拼图块创建16个框,并在释放鼠标时使用它们的坐标作为图像的捕捉位置。在益智游戏中,当你在一个普通区域悬停时,棋子是如何捕捉到正确的位置的。我试图通过制作16个JPanel来实现这一点,但我不知道这是否是明智的方式。而且,似乎我甚至不能将JPanel添加到我的JLayeredPane中。我试图为其中一个J
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上?我似乎找不到任何边界方法。