0

我正在尝试编写代码以使每次按下时都会转动卡片。是 JCardDemo 小程序中 createGUI 的问题吗?那怎么纠正呢?这是我的代码。thx

JCardbutton 类导入 java.applet。; 导入 java.awt。; 导入 java.awt.event。; 导入 javax.swing。; 导入 javax.swing.event.*;导入 java.awt.geom.AffineTransform;

public class JCardButton extends JButton {
private ImageIcon myFace;
private ImageIcon myBack;
private boolean myFaceUp;
private Rank myRank;
private Suit mySuit;

public Rank getRank() {
    return myRank;
}

public Suit getSuit() {
    return mySuit;
}

public JCardButton(Suit s, Rank r, ImageIcon face, ImageIcon back) {
    super();

    mySuit = s;
    myRank = r;
    setFace(face);
    setBack(back);

    this.setSize(face.getIconWidth(), face.getIconHeight());
    showBack();
}

public ImageIcon getFaceImage() {
    return myFace;
}

public boolean isFaceUp() {
    return true;//isFaceUp
}

public boolean isFaceDown() {
    return false;//
}

public ImageIcon getBackImage() {
    return myBack;
}

public void setFace(ImageIcon image) {
    image = myFace;
}

public void setBack(ImageIcon image) {
    image = myBack;
}

public void showBack() {
    setIcon(myBack);
    myFaceUp = false;
}

public void showFace() {
    setIcon(myFace);
    myFaceUp = true;
}

public void turnOver() {
    if(isFaceUp()) {
        showBack();
    }
    else {
        showFace();
    }
}

public int compareTo (JCardButton other) {
    if(this.getSuit().compareTo(other.getSuit()) ==0) {
        return this.getRank().compareTo(other.getRank());
    }
    else {
        return this.getSuit().compareTo(other.getSuit());
    }
}

public String toString() {
    return myRank.toString() + mySuit.toString();
}

}

JCardDemo 导入 java.awt.event。; 导入 java.awt。; 导入 javax.swing.*;

public class JCardDemo extends JApplet implements ActionListener
{
private    static final long serialVersionUID = 2005L;
private    Container    window;
private    JCardButton  jcbCard;

public    void init() {
    window = new DoubleBufferedPanel();
    setContentPane(window);

    createAppearance();
    createGUI();

}

public void createAppearance(){
    window.setLayout(null);
}

public void createGUI()
{
    ImageIcon front = new ImageIcon(getImage(getCodeBase(), "images/2c.gif"));
    ImageIcon back = new ImageIcon(getImage(getCodeBase(), "images/b.gif"));

    jcbCard = new JCardButton(Suit.clubs, Rank.two, front, back);
    jcbCard.setLocation(50, 50);
    jcbCard.addActionListener(this);
    window.add(jcbCard);
}

public void actionPerformed(ActionEvent e)
{
    if(e.getSource() instanceof JCardButton)
    {
        JCardButton c = (JCardButton) e.getSource();
        c.turnOver();
    }
    repaint();
}

class DoubleBufferedPanel extends JPanel {
    private static final long    serialVersionUID = 44L;

    public void paint(Graphics g){
        super.paint(g);
    }
}

}

排名枚举

public enum Rank
{
ace,
two,
three,
four,
five,
six,
seven,
eight,
nine,
ten,
jack,
queen,
king;

public String toString()
{
    switch(this)
    {
        case ace: return "A";
        case two: return "2";
        case three: return "3";
        case four: return "4";
        case five: return "5";
        case six: return "6";
        case seven: return "7";
        case eight: return "8";
        case nine: return "9";
        case ten: return "T";
        case jack: return "J";
        case queen: return "Q";
        case king: return "K";
        default: return "??";
    }
}

}

适合枚举

public enum Suit
{
clubs, hearts, spades, diamonds;

public String toString()
{
    return this.name().substring(0, 1).toUpperCase();
}
}
4

1 回答 1

1

图像切换功能在这里不起作用有两个原因。

首先是图像分配是错误的JCardButton

public void setFace(ImageIcon image) {
   image = myFace; // local variable image assigned to myFace still null
}

它应该是

public void setFace(ImageIcon image) {
   myFace = image;
}

setBack也适用于。

其次,isFaceUp总是返回true

public boolean isFaceUp() {
    return true; //??
}

用。。。来代替

public boolean isFaceUp() {
    return myFaceUp;
}
于 2013-04-28T01:06:02.657 回答