Не удается найти метод символа drawImage (SlidingBlockModel, int, int, int, int, <nulltype>) - PullRequest
0 голосов
/ 13 марта 2011

Я пытаюсь сделать игру со скользящим блоком.В этом классе я использовал метод drawImage для отображения блоков «головоломки», используя метод drawImage объекта Graphics g2.Но в методе класса рисования я получаю эту ошибку: Не удается найти метод символа drawImage (SlidingBlockModel, int, int, int, int,).Какие-либо предложения?Я ценю ваше время на чтение этого.Заранее спасибо.:)

Zoi

Код следующий:

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.image.*;
import java.awt.Graphics.*;

class SlidingBlockPanel extends JPanel implements MouseListener
{
int numCols;
int numRows;

SlidingBlockModel SBModel;

public static void main(String[] args)
{
    SlidingBlockFrame w = new SlidingBlockFrame();
    w.setVisible(true);
}


public SlidingBlockPanel(int nc, int nr)
{
    numCols = nc;
    numRows = nr;
    addMouseListener(this);
    SBModel= new SlidingBlockModel(numCols, numRows, "puzzle.jpg");
}
int getCol(int x)
{
    return x*numCols/getWidth();
}
int getRow(int y)
{
    return y*numRows/getHeight();
}

public void mouseReleased(MouseEvent event)
{
}
public void mousePressed(MouseEvent event)
{
}
public void mouseClicked(MouseEvent event)
{
    int thisCol = getCol(event.getX());
    System.out.println
    ("you clicked in column " + thisCol);

}
public void mouseEntered(MouseEvent event)
{
}
public void mouseExited(MouseEvent event)
{
}


Rectangle getRect(int thisCol, int thisRow)
{
    // if input is out of range, return "null"
    if(thisCol <0 || thisRow < 0)
        return null;
    if(thisCol>=numCols || thisRow>=numRows)
        return null;

    // otherwise, make and return the Rectangle
    int w = getWidth()/numCols;
    int h = getHeight()/numRows;

    int x = thisCol*w;
    int y = thisRow*h;

    Rectangle myRect = new Rectangle(x,y,w,h);
    return myRect;
}

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 "drawImage" method this time

    for (int i = 0;i<numCols;i++)
    {
        for(int j = 0;j<numRows;j++)
        {

            SBModel.getSubimage(i, j);
            Rectangle r = getRect(i, j);
            g2.drawImage(SBModel,r.x,r.y,r.width,r.height,null);


        }
    } 

}


}

Ответы [ 3 ]

1 голос
/ 13 марта 2011

SlidingBlockModel наследуется от java.awt.Image?Это должно произойти, поскольку вызываемый вами метод имеет подпись void drawImage(Image, int, int, int, int, ImageObserver).Кажется, это единственная возможная проблема с кодом.

1 голос
/ 13 марта 2011

Это означает, что ваш SBModel не является типом изображения java.awt.

Попробуйте изменить ваш класс SlidingBlockModel таким образом:

SlidingBlockModel extends Image {}
0 голосов
/ 13 марта 2011

SlidingBlockModel должен быть подклассом java.awt.Image в некотором роде - прямо или косвенно. Так что вам нужно либо расширяться от Image, BufferedImage или VolatileImage.

Похоже, что это не в данный момент, поэтому он жалуется, что не может найти данный тип метода, он не может найти метод с такой совпадающей сигнатурой.

...