0

enum を使用して一連の文字列を格納しようとしていますが、それらを文字列に変換しようとすると機能しません。「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";
            }
        }
    }
4

6 に答える 6

1

列挙型は文字列ではありません。それらの間で変換するには、valueOf を使用する必要があります

例えば、

selectedPiece.valueOf("ROOK");

enum selectedPiece.ROOK を返します

列挙型を記述するとき、カスタム値を使用できます。

Public enum Piece {
  ROOK("Rook"),
  QUEEN("Queen")
}
于 2013-03-22T15:12:17.260 に答える
0

pieceタイプですselectedPiece(あなたの列挙型)

それに文字列を割り当てることはできません。パスを別の変数に保存します。

例えば。:

String piecePath;
switch (piece){
                    case NONE:
                            piecePath = "E:\\Eclipse\\ChessF\\src\\Images\\EmptySquare.jpg";
 ...
于 2013-03-22T15:14:25.253 に答える
0

列挙型をクラスの変数として使用して、その型を決定する必要があります。次のように簡単に追加できます。

    public selectedPiece pieceType;

次に、オブジェクトのどこかに型を設定します。

    pieceType = selectedPiece.ROOK;

次に、列挙型を使用して switch ステートメントを実行し、文字列を文字列変数に割り当てることができます。

これを整理する方法はあなた次第です。

于 2013-03-22T15:14:53.833 に答える
0

その場合this.currentPiece = piece;、String オブジェクトに列挙型を割り当てようとしています。それは不可能だ。

于 2013-03-22T15:13:07.300 に答える