0

我试图通过首先单击该块然后单击该正方形以将其移动来将一块从网格中的一个正方形移动到另一个。

如何保存第一个图标的位置,然后与第二个交换?

目前我正在查看这段代码,它只是将棋子向左移动一格:

public void actionPerformed(ActionEvent e)  
{
for ( x=0; x<8; x++)
        for( y=0; y<8; y++) {
        if(e.getSource() == board[x][y])
        ((ChessSquare)e.getSource()).swap(board[x][y-1]);
    }
}
4

2 回答 2

1
  • 存储一个标志,指示这是“拖动”还是“拖放” 1
  • 如果'drag'存储原始坐标并将标志更改为'drop'。
  • 如果“drop”读取源的坐标,请随意使用它们并将标志设置回“drag”。

  1. 我的意思是像声明 aboolean drag并根据需要设置它true/ false

..存储坐标的最佳位置?

我会使用 2 个int属性,但如果你想滥用一个Dimension对象,只有一个可以同时存储 x 和 y 坐标。

..不,废弃它。使用 mKorbel 指示的客户端属性似乎更“整洁”。

于 2013-03-18T17:51:08.860 回答
0
  • 我们需要一个布尔标志来跟踪“点击”
  • 如果 flag = false 则为第一次单击,否则为第二次单击(这是我们将执行交换的地方)。

    public void actionPerformed(ActionEvent e)  
    {
        int xPos1,xPos2,yPos1,yPos2;
        if(!flag)
        {
          for ( x=0; x<8; x++)
          {
              for( y=0; y<8; y++) 
              {
                if(e.getSource() == board[x][y])
                {
                  xPos1 = x; // Source icon cordinates.
                  yPos2 = y;
                  break;
                }
              }
          }
          flag = true;
        }
        else
        {
          for ( x=0; x<8; x++)
          {
            for( y=0; y<8; y++) 
            {
              if(e.getSource() == board[x][y])
              {
                xPos2 = x;  // Target icon cordinates.
                yPos2 = y;
                break;
              }
            }
          }
    
          // Swapping code add your version of this swapping code here.
          // Swap source with target.
          Icon temp = board[xPos1][yPos1]
          board[xPos1][yPos1] = board[xPos2][yPos2];
          board[xPos2][yPos2] = temp;          
          // ----------------- End Swap----------------  
    
          flag = false; // ready for next swap operation.
      }   
    

    }

于 2013-03-18T17:52:54.863 回答