Java Abacus,用for循环来绘制我的计数器有问题

时间:2012-04-25 20:58:11

标签: java swing

正如标题所说,当我最终在我的算盘上绘制计数器时,我的Java代码出现问题。代码编译并运行,但计数器从第一行而不是顶行开始绘制。除此之外,计数器不会堆叠在每一列中,一个计数器出现并根据单击的按钮上下移动,这是正确的,但计数器应该在我左键单击时添加或在我右键单击时减去。

我已经花了几个小时在这上面,我确信这是愚蠢的,但我的大脑已停止工作,我无法想到任何解决方案。

无论如何,这是我的代码。

AbacusPanel.java

public void paint(Graphics g)
{
    g.setColor(Color.gray);
    g.fillRect(0,0,getWidth(), getHeight());
    g.setColor(Color.black);

    Graphics2D g2 = (Graphics2D)g;
    // we'll use Graphics2D for it's "draw" method -
    // neater than the Graphics "drawRect" suppled
    // (which you could also use)

    for (int i = 0;i<numCols;i++)
    {
        for(int j = 0;j<numRows;j++)
        {
            g2.draw(getRect(i,j));
        }
    }

    for(int thisCol= 0; thisCol < numCols; thisCol++)
    {
        for(int thisRow = 0; thisRow < numRows; thisRow++)
        {
            for(int counters=0; counters<=myAbacus.getNumCounters(thisCol); counters++)
            {
                Rectangle r2 = getRect(thisCol,myAbacus.getNumCounters(thisCol));
                g2.setColor(Color.red);
                g2.fillOval(r2.x, r2.y, r2.width, r2.height);
            }
        }
    }

}

希望那里有人可以指出我正确的方向并抱歉,如果任何一个没有格式化你想要的方式。这是我的第一个问题帖子,我试图让它变得容易。

1 个答案:

答案 0 :(得分:1)

根据我的评论:

当您绘制石头的占位符时,您将遍历列,然后遍历行。但是当绘制计数器时,您只迭代列而不是行。为什么不行呢?并且不应该getNumCounters()的结果同时采用列和&amp;作为输入行,因为你试图获得mancala板上每个位置的计数器数量,对吧?

在回答第二个问题时,我必须相信getNumCounters()必须同时将行和列作为输入。由于你在mancala板上有两排,并且石头的数量取决于柱子以及它是在第一排还是第二排,否则它就没有意义了。

另外,要考虑的第三件事。在你的矩形中,当你绘制你的计数器时,它似乎需要改变它们的位置 - 在我看来你的每个计数器将叠加在一起,所以20个计数器看起来没有不同于1.