title: Cards and JButtons
body: <p>I am trying to write a code to make a card turn every time I press it.
  Is the problem in createGUI in JCardDemo applet? How to correct it then?
  here's my code.thx</p>
  
  <p>JCardbutton class
      import java.applet.<em>;
      import java.awt.</em>;
      import java.awt.event.<em>;
      import javax.swing.</em>;
      import javax.swing.event.*;
      import java.awt.geom.AffineTransform;</p>
  
  <pre><code>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();
  }
  </code></pre>
  
  <p>}</p>
  
  <p>JCardDemo
      import java.awt.event.<em>;
      import java.awt.</em>;
      import javax.swing.*;</p>
  
  <pre><code>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);
      }
  }
  </code></pre>
  
  <p>}</p>
  
  <p>Rank enum</p>
  
  <pre><code>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 "??";
      }
  }
  </code></pre>
  
  <p>}</p>
  
  <p>Suit enum</p>
  
  <pre><code>public enum Suit
  {
  clubs, hearts, spades, diamonds;
  
  public String toString()
  {
      return this.name().substring(0, 1).toUpperCase();
  }
  }
  </code></pre>