返回

java-如何在用户单击后在图形2D上移动图像

发布时间:2022-06-29 09:57:28 329
# 移动端

我实施了MouseListener和上mousePressed,当按下鼠标时,我得到工件所在的x轴和y轴,然后打开mouseReleased,我得到释放鼠标时工件所在的x轴和y轴。我想做被压的那块,这是BufferedImage,移动到释放鼠标的位置。我试着重新绘制Graphics2D但这并不奏效。

代码:

public class NewBoard extends JPanel implements MouseListener{
static public Font font;
private Map x_AxisMap = new HashMap();
private Map y_AxisMap = new HashMap();
public int[][] positions = {{0, 1, 2, 3, 4, 5, 6, 7}, 
                     {8, 9, 10, 11, 12, 13, 14, 15}, 
                     {16, 17, 18, 19, 20, 21, 22, 23}, 
                     {24, 25, 26, 27, 28, 29, 30, 31}, 
                     {32, 33, 34, 35, 36, 37, 38, 39}, 
                     {40, 41, 42, 43, 44, 45, 46, 47}, 
                     {48, 49, 50, 51, 52, 53, 54, 55}, 
                     {56, 57, 58, 59, 60, 61, 62, 63}};

public Map piecePosition = new HashMap();
public NewBoard(){
    try { font = Font.createFont(Font.TRUETYPE_FONT, new File("AlphaRomaineFont.ttf"));
    }
    catch(IOException | FontFormatException e){
        e.printStackTrace(); 
    }


    addMouseListener(this);
    setBackground(Color.decode("#ebe4e4"));


    for(int i = 0; i <= 63; i++){
        if(i == 0 || i == 7) piecePosition.put(i, "black ROOK");
        if(i == 1 || i == 6) piecePosition.put(i, "black KNIGHT");
        if(i == 2 || i == 5) piecePosition.put(i, "black BISHOP");
        if(i == 3) piecePosition.put(i, "black QUEEN");
        if(i == 4) piecePosition.put(i, "black KING");
        if(i >= 8 && i <= 15) piecePosition.put(i, "black PAWN");

        if(i == 56 || i == 63) piecePosition.put(i, "white ROOK");
        if(i == 57 || i == 62) piecePosition.put(i, "white KNIGHT");
        if(i == 58 || i == 61) piecePosition.put(i, "white BISHOP");
        if(i == 59) piecePosition.put(i, "white QUEEN");
        if(i == 60) piecePosition.put(i, "white KING");
        if(i >= 48 && i <= 55) piecePosition.put(i, "white PAWN");

        if(i >= 16 && i <= 47) piecePosition.put(i, null);
    }

    System.out.println(piecePosition);
    String a ="abcdefgh";
    String n = "87654321";
    for(int i = 0; i <= 7; i++){
        x_AxisMap.put(i, a.charAt(i));
    }
    
    for(int i = 0; i <= 7; i++){
        y_AxisMap.put(i, n.charAt(i));
    }
}

@Override
public Dimension getPreferredSize() {
    return new Dimension(720, 720);
}
@Override
protected void paintComponent (Graphics graphic){
    super.paintComponent(graphic);
    Graphics2D g2d = (Graphics2D) graphic.create();
    boolean color = true;
    g2d.setFont(new Font("AlphaRomaineFont.ttf", Font.PLAIN, 18));
        for(int y = 0; y < 8; y++){
            for(int x = 0; x < 8; x++){
                if(color){
                    g2d.setColor(Color.decode("#f7e7ce")); //bright 
                }
                else if(!color){
                    g2d.setColor(Color.decode("#B58863")); //dark
                }
                g2d.fillRect(x*(getWidth()/8), y*(getHeight()/8), getWidth()/8, getHeight()/8);

                if(y == 7){
                    g2d.setColor(Color.BLACK);
                    g2d.drawString(String.valueOf(x_AxisMap.get(x)), x*(getWidth()/8)+3,  y*(getHeight()/8)+87);
                    if(color){
                        g2d.setColor(Color.decode("#f7e7ce"));
                    }
                    else if(!color){
                        g2d.setColor(Color.decode("#B58863"));
                    }
                }

                if(x == 7){
                    g2d.setColor(Color.BLACK);
                    g2d.drawString(String.valueOf(y_AxisMap.get(y)), x*(getWidth()/8)+80,  y*(getHeight()/8)+15);
                    if(color){
                        g2d.setColor(Color.decode("#f7e7ce"));
                    }
                    else if(!color){
                        g2d.setColor(Color.decode("#B58863"));
                    }
                }
                if(y == 0){
                    if(x == 0 || x == 7){
                        Image piece = Piece.ROOK.black();
                        g2d.drawImage(piece, x*(getWidth()/8), y*(getWidth()/8), this);
                    }
                    if(x == 1 || x == 6){
                        Image piece = Piece.KNIGHT.black();
                        g2d.drawImage(piece, x*(getWidth()/8), y*(getWidth()/8), this);
                    }
                    if(x == 2 || x == 5){
                        Image piece = Piece.BISHOP.black();
                        g2d.drawImage(piece, x*(getWidth()/8), y*(getWidth()/8), this);
                    }
                    if(x == 3){
                        Image piece = Piece.QUEEN.black();
                        g2d.drawImage(piece, x*(getWidth()/8), y*(getWidth()/8), this);


                    }
                    if(x == 4){
                        Image piece = Piece.KING.black();
                        g2d.drawImage(piece, x*(getWidth()/8), y*(getWidth()/8), this);
                    }
                }
                if(y == 1){
                    Image piece = Piece.PAWN.black();
                    g2d.drawImage(piece, x*(getWidth()/8), y*(getWidth()/8), this);
                }

                if(y == 6){
                    Image piece = Piece.PAWN.white();
                    g2d.drawImage(piece, x*(getWidth()/8), y*(getWidth()/8), this);
                }

                if(y == 7){
                    if(x == 0 || x == 7){
                        Image piece = Piece.ROOK.white();
                        g2d.drawImage(piece, x*(getWidth()/8), y*(getWidth()/8), this);
                    }
                    if(x == 1 || x == 6){
                        Image piece = Piece.KNIGHT.white();
                        g2d.drawImage(piece, x*(getWidth()/8), y*(getWidth()/8), this);
                    }
                    if(x == 2 || x == 5){
                        Image piece = Piece.BISHOP.white();
                        g2d.drawImage(piece, x*(getWidth()/8), y*(getWidth()/8), this);
                    }
                    if(x == 3){
                        Image piece = Piece.QUEEN.white();
                        g2d.drawImage(piece, x*(getWidth()/8), y*(getWidth()/8), this);
                    }
                    if(x == 4){
                        Image piece = Piece.KING.white();
                        g2d.drawImage(piece, x*(getWidth()/8), y*(getWidth()/8), this);
                    }
                }
                color = !color;

            }
            color = !color;
        }

    }   
private BufferedImage pressedPiece;
private int pressedPosition;
private int pressedX;
private int pressedY;


private BufferedImage releasedPiece;
private int releasedPosition;
private int releasedX;
private int releasedY;
@Override
public void mouseClicked(MouseEvent e) {
    // TODO Auto-generated method stub

}
@Override
public void mousePressed(MouseEvent e) {
    // TODO Auto-generated method stub
    System.out.println("Pressed");
    if(getPiece(e.getX(), e.getY()) != null){
        String[] split = getPiece(e.getX(), e.getY()).split(" ");
        if(split[0].equals("white")){
            if(split[1].equals("PAWN")) pressedPiece = Piece.PAWN.white();
            if(split[1].equals("ROOK")) pressedPiece = Piece.ROOK.white();
            if(split[1].equals("KNIGHT")) pressedPiece = Piece.KNIGHT.white();
            if(split[1].equals("BISHOP")) pressedPiece = Piece.BISHOP.white();
            if(split[1].equals("QUEEN")) pressedPiece = Piece.QUEEN.white();
            if(split[1].equals("KING")) pressedPiece = Piece.KING.white();
        }
        if(split[0].equals("black")){
            if(split[1].equals("PAWN")) pressedPiece = Piece.PAWN.black();
            if(split[1].equals("ROOK")) pressedPiece = Piece.ROOK.black();
            if(split[1].equals("KNIGHT")) pressedPiece = Piece.KNIGHT.black();
            if(split[1].equals("BISHOP")) pressedPiece = Piece.BISHOP.black();
            if(split[1].equals("QUEEN")) pressedPiece = Piece.QUEEN.black();
            if(split[1].equals("KING")) pressedPiece = Piece.KING.black();
        }
    }


    pressedX = e.getX()/(getWidth()/8);
    pressedY = e.getY()/(getWidth()/8);
    pressedPosition = getNumberPosition(pressedX, pressedY);
    setBackground(Color.decode("#cf1e15"));
    setOpaque(true);
}
@Override
public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub
    System.out.println("Released");
    if(getPiece(e.getX(), e.getY()) != null){
        String[] split = getPiece(e.getX(), e.getY()).split(" ");
        if(split[0].equals("white")){
            if(split[1].equals("PAWN")) releasedPiece = Piece.PAWN.white();
            if(split[1].equals("ROOK")) releasedPiece = Piece.ROOK.white();
            if(split[1].equals("KNIGHT")) releasedPiece = Piece.KNIGHT.white();
            if(split[1].equals("BISHOP")) releasedPiece = Piece.BISHOP.white();
            if(split[1].equals("QUEEN")) releasedPiece = Piece.QUEEN.white();
            if(split[1].equals("KING")) releasedPiece = Piece.KING.white();
        }
        if(split[0].equals("black")){
            if(split[1].equals("PAWN")) releasedPiece = Piece.PAWN.black();
            if(split[1].equals("ROOK")) releasedPiece = Piece.ROOK.black();
            if(split[1].equals("KNIGHT")) releasedPiece = Piece.KNIGHT.black();
            if(split[1].equals("BISHOP")) releasedPiece = Piece.BISHOP.black();
            if(split[1].equals("QUEEN")) releasedPiece = Piece.QUEEN.black();
            if(split[1].equals("KING")) releasedPiece = Piece.KING.black();
        }
    }

    releasedX = e.getX()/(getWidth()/8);
    releasedY = e.getY()/(getWidth()/8);
    releasedPosition = getNumberPosition(releasedX, releasedY);
    makeChanges();
}
@Override
public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub
    //System.out.println("Entered");
}
@Override
public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub
    //System.out.println("Exited");
}

private String getPiece(int x, int y){
     x = x/(getWidth()/8);
     y = y/(getWidth()/8);

    System.out.println(piecePosition.get(positions[y][x]));
    return piecePosition.get(positions[y][x]);
}
private int getNumberPosition(int x, int y){
    return positions[y][x];
}
public void makeChanges(){
    if(pressedPosition != releasedPosition){
        String pressedColor = "";
        String releasedColor = "";
        if((pressedY % 2 == 0 && pressedX % 2 == 0) || (pressedY % 2 != 0 && pressedX % 2 != 0)) pressedColor = "#f7e7ce";
        if((pressedY % 2 == 0 && pressedX % 2 != 0) || (pressedY % 2 != 0 && pressedX % 2 == 0)) pressedColor = "#B58863";

        if((releasedY % 2 == 0 && releasedX % 2 == 0) || (releasedY % 2 != 0 && releasedX % 2 != 0)) releasedColor = "#f7e7ce";
        if((releasedY % 2 == 0 && releasedX % 2 != 0) || (releasedY % 2 != 0 && releasedX % 2 == 0)) releasedColor = "#B58863";

        
        //if(!tempColor.equals("")) g2d.setColor(Color.decode(tempColor));
        //else g2d.setColor(Color.RED);
    }
}

}

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像
下一篇
在java中进行搜索的最佳方式? 2022-06-29 07:50:38