我正在尝试使用枚举来存储一堆字符串,但是当我将它们转换为字符串时它不起作用。我得到错误“无法从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";
}
}
}
答案 0 :(得分:2)
在Java中,enum是一个完整的类...因此,你应该将你的枚举操作(转换为/来自字符串)放在其中。例如:
public enum SelectedPiece{
NONE("E:\\Eclipse\\ChessF\\src\\Images\\EmptySquare.jpg"),
PAWN("E:\\Eclipse\\ChessF\\src\\Images\\Pawn.jpg"),
ROOK("E:\\Eclipse\\ChessF\\src\\Images\\Rook.jpg"),
KNIGHT("E:\\Eclipse\\ChessF\\src\\Images\\Knight.jpg"),
BISHOP("E:\\Eclipse\\ChessF\\src\\Images\\Bishop.jpg"),
QUEEN("E:\\Eclipse\\ChessF\\src\\Images\\Queen.jpg"),
KING("E:\\Eclipse\\ChessF\\src\\Images\\King.jpg");
private String imageFilename;
private ImageIcon image;
private SelectedPiece( String imageFilename ) throws IOException {
this.imageFilename = imageFilename;
this.image = new ImageIcon(ImageIO.read(new File(piece)));
}
public String getImageFilename() {
return imageFilename;
}
public ImageIcon getImage() {
return image;
}
}
等等......然后在需要的地方使用枚举值。
答案 1 :(得分:1)
枚举不是字符串。要在它们之间进行转换,您需要使用valueOf
如,
selectedPiece.valueOf("ROOK");
将返回enum selectedPiece.ROOK
编写枚举时,您可以使用自定义值,例如
Public enum Piece {
ROOK("Rook"),
QUEEN("Queen")
}
答案 2 :(得分:0)
执行this.currentPiece = piece;
时,您试图在String对象中分配枚举类型。这是不可能的。
答案 3 :(得分:0)
piece
的类型为selectedPiece
(您的枚举)
不允许为其分配字符串。将路径存储在另一个变量中。
例如:
String piecePath;
switch (piece){
case NONE:
piecePath = "E:\\Eclipse\\ChessF\\src\\Images\\EmptySquare.jpg";
...
答案 4 :(得分:0)
您应该使用枚举作为类中的变量来确定其类型。你可以简单地添加:
public selectedPiece pieceType;
然后在对象中的某处设置类型:
pieceType = selectedPiece.ROOK;
然后,您可以使用enum将switch语句分配给字符串变量。
您的组织方式取决于您。
答案 5 :(得分:0)
也许这是使用CONSTANTS的情况?毕竟如果一个pawn的图形图像总是要是同一个图像,那不能使它保持不变吗?
static final string IMAGE_NONE = "E:\\Eclipse\\ChessF\\src\\Images\\EmptySquare.jpg";
static final string IMAGE_PAWN = "E:\\Eclipse\\ChessF\\src\\Images\\Pawn.jpg";
并在您的案例陈述中
case PAWN:
piece = IMAGE_PAWN
等等