使用ActionListener交换网格中的两个图标

时间:2013-03-18 17:44:31

标签: java multidimensional-array awt actionlistener chess

我试图将一块棋子从一个网格中的一个正方形移动到另一个正方形,先点击该棋子,然后点击正方形移动它。

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

目前,我正在查看此代码,该代码只是向左移动一个方块:

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]);
    }
}

2 个答案:

答案 0 :(得分:1)

  • 存储一个标志,指示这是“拖动”还是“下降” 1
  • 如果'拖'存储原始坐标并将标记更改为'删除'。
  • 如果'drop'读取源的坐标,请按照您的意愿使用它们并将标志设置回“拖动”。

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

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

    我会使用2个int属性,但如果你想滥用Dimension个对象,只需要存储x&amp; y co-ords。

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

答案 1 :(得分:0)

  • 我们需要一个布尔标志来跟踪'click'
  • 如果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.
      }   
    

    }