【发布时间】:2013-03-12 12:08:55
【问题描述】:
我正在尝试使用枚举来存储一堆字符串,但是当我将它们转换为字符串时它不起作用。我收到错误消息“无法从 String 转换为 ChessSquare.SelectedPiece。我认为这只是一点点变化,但我找不到要更改的内容。
这是我的代码:
package Logic;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
//chess square class, 1 instance of which for each square in the grid
@SuppressWarnings("serial")
public class ChessSquare extends JButton {
//instance variables for position and pieces
public int posX;
public int posY;
public String currentPiece;
public enum selectedPiece{
NONE, PAWN, ROOK, KNIGHT, BISHOP, QUEEN, KING
}
selectedPiece piece;
//load images and cast into icons
BufferedImage buttonIcon = ImageIO.read(new File(piece));
ImageIcon Icon = new ImageIcon(buttonIcon);
BufferedImage
//constructor for chess squares
public ChessSquare(int x, int y, double p) throws IOException {
this.setIcon(Icon);
setVisible(true);
}
//accessor method for position
public void squarePos(int x, int y){
this.posX = x;
this.posY = y;
}
//accessor method for currentPiece
public void cPiece(){
this.currentPiece = piece;
}
//specify what each value of enum slectedPiece represents
public void selectedPiece(){
switch (piece){
case NONE:
piece = "E:\\Eclipse\\ChessF\\src\\Images\\EmptySquare.jpg";
case PAWN:
piece = "E:\\Eclipse\\ChessF\\src\\Images\\Pawn.jpg";
case ROOK:
piece = "E:\\Eclipse\\ChessF\\src\\Images\\Rook.jpg";
case KNIGHT:
piece = "E:\\Eclipse\\ChessF\\src\\Images\\Knight.jpg";
case BISHOP:
piece = "E:\\Eclipse\\ChessF\\src\\Images\\Bishop.jpg";
case QUEEN:
piece = "E:\\Eclipse\\ChessF\\src\\Images\\Queen.jpg";
case KING:
piece = "E:\\Eclipse\\ChessF\\src\\Images\\King.jpg";
}
}
}
【问题讨论】:
-
enum != String。你不能像那样交换类型。 -
我无法编译你的代码:
ImageIcon Icon = new ImageIcon(buttonIcon); BufferedImage -
没有回答你的问题,但你真的应该把 break;和默认值:在您的开关盒中。那会让你免于地狱。
-
问题出在您的 cPiece 方法中。您的 cPiece 方法到底应该做什么?
-
仅供参考,您可以使用 / 作为目录分隔符。在 Windows 上,JVM 会将其转换为 \。