我正在学习Swing并且认为制作游戏会让这个过程对我来说更有趣。我的JFrame都设置了菜单和工具栏,但现在我正在构建一个JPanel作为游戏区域,在这种情况下我想制作一个网格。我可以使用以下方法轻松地在面板上绘制一个:
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.black);
for(int x = 0 ; x <= getWidth() ; x += 16 ) {
g.drawLine( x , 0 , x , getHeight() );
}
g.setColor(Color.black);
for(int y = 0 ; y <= getHeight() ; y += 16 ) {
g.drawLine( 0 , y , getWidth() , y );
但如果我想在电路板上准确放置和移动图像,这在以后的用途上有限。有没有其他方法可以绘制网格,也许使用数组?在我开始进行交互之前,只是尝试制作一个干净的布局,并且会欣赏任何建议。谢谢!
答案 0 :(得分:1)
使用您的尺寸创建图像,或者根据设置网格线的规则放置精灵。
//Declare some extra variables
int coordX;
int coordY;
final BufferedImage image = ImageIO.read(new FileInputStream("picture.jpg"));
PointerInfo a = MouseInfo.getPointerInfo();
//Call this every time the mouse is clicked.
Point b = a.getLocation();
int mouseClickX = (int) b.getX();
int mouseClickY = (int) b.getY();
void place() {//Make a function that establishes ranges to be clicked
if(mouseClickX < 16 && mouseClickX > 0 && mouseClickY < 16 && mouseClickY > 0)
coordX = coordY = 0; //places at top corner
else if()//slot 2, 3, etc...
}
//paintComponent method:
g.drawImage(image, coordX, coordY, this); //set coordinates in 0,0
除了您当前的选项 如果您希望您的游戏元素是Swing组件,那么GridBagLayout就是您要寻找的。虽然它需要一些习惯,但它是Swing提供的最自定义的布局。
有关使用GridBagLayout的更多信息,请访问in this tutorial by oracle。
答案 1 :(得分:0)
您可以创建一个JPanel网格,这些网格都保存在GridLayout中。如果您希望每个单元格保存可拖动的图片,则将图像放在ImageIcon中,JLabel中的图标,并将JLabel添加到JPanel网格的其中一个单元格中。如果单元格使用GridBagLayout,则默认情况下将在JPanel单元格的中心显示单个JLabel。要拖放,请提供JLabels MouseListeners和MouseMotionListeners。如果单击,则从JPanel中删除JLabel并将其移动到顶层窗口的玻璃窗格。等...