-1

我目前正在学习 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 );

但是,如果我想在板上准确放置和移动图像,这在以后的用途有限。还有另一种方法可以绘制网格,也许使用数组?在我深入交互之前尝试做一个干净的布局,并希望得到任何建议。谢谢!

4

2 回答 2

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 的更多信息,可以在 oracle 的本教程中找到。

于 2013-03-30T03:47:44.407 回答
0

您可以创建一个 JPanel 网格,所有这些 JPanel 都保存在 GridLayout 中。如果您希望每个单元格都包含一个可拖动的图片,则将图像放入 ImageIcon 中,将图标放入 JLabel 中,并将 JLabel 添加到 JPanel 网格的其中一个单元格中。如果单元格使用 GridBagLayout,则默认情况下,单个 JLabel 将显示在 JPanel 单元格的中心。要拖放,请提供 JLabels MouseListeners 和 MouseMotionListeners。如果单击,则从 JPanel 中删除 JLabel 并将其移动到顶层窗口的玻璃窗格中。ETC...

于 2013-03-30T11:36:10.177 回答