2013-04-27 5 views
0

나는 카드를 누를 때마다 카드를 돌리기위한 코드를 작성하려고합니다. JCardDemo 애플릿의 createGUI에 문제가 있습니까? 어떻게 수정해야합니까? 여기 내 코드가 있습니다.카드 및 JButton

JCardbutton 클래스 import java.applet. ; 가져 오기 java.awt.; 가져 오기 java.awt.event. ; import javax.swing.; import 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.; import 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(); 
} 
} 

답변

1

.

첫 번째는 이미지 할당이

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

이것은 또한 setBack 시만 적용해야 JCardButton

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

에서 길을 잘못 내내 것입니다.

둘째, isFaceUp는 항상 true

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

내 문제를 해결하기 위해 다시

public boolean isFaceUp() { 
    return myFaceUp; 
} 
+0

들으로 교체 반환합니다 :) –