title: Java applet buttons are not displayed until i hover the mouse over them
body: <p>So My problem is that the applet lunches with nothing in it as soon as i hover the mouse 
  on top of the buttons it displays them and works perfectly afterwards. I think there might be something wrong with paint but i am not sure. I tried several changes but noting seems to work. 
  Any help will be much appreciated.</p>
  
  <p>-- Rafael</p>
  
  <pre><code>    import java.awt.BorderLayout;
  import java.awt.Color;
  import java.awt.Container;
  import java.awt.Dimension;
  import java.awt.FlowLayout;
  import java.awt.Font;
  import java.awt.Graphics;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import javax.swing.*;
  import javax.swing.event.ListSelectionEvent;
  import javax.swing.event.ListSelectionListener;
  
  public class poker extends JApplet implements ActionListener, ListSelectionListener {
  
      private DefaultListModel listModel = new DefaultListModel();
      JList jList = new JList(listModel);
      JButton dealButton = new JButton("Deal");
      JButton quitButton = new JButton("Quit");
      JButton finishButton = new JButton("finish");
      JPanel panel = new JPanel();
      JPanel jPanel = new JPanel();
      JPanel lPanel = new JPanel();
      JLabel label = new JLabel();
      JLabel balance = new JLabel();
  
      private String displayDeal = null;
      private String displayFinish = null;
      private poker.Card deck[];
      private int currentCard;
      private double money = 0;
      private poker.Card hand[];
      private boolean nothing;
      private boolean pair;
      private boolean twoPair;
      private boolean threeKind;
      private boolean fourKind;
      private boolean fullHouse;
      private boolean flush;
      private boolean straight;
      private boolean royalStraight;
      private boolean straightFlush;
      private boolean RoyalFlush;
  
      String faces[] = {"Deuce", "Three", "Four", "Five", "Six", "Seven", "Eight",
          "Nine", "Ten", "Jack", "Queen", "King", "Ace"};
      String suits[] = {"Hearts", "Diamonds", "Clubs", "Spades"};
  
      @Override
      public void init() {
  
          this.setSize(500, 500);
          this.setLayout(new BorderLayout());
  
          jList.addListSelectionListener(this);
          jList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
  
          hand = new poker.Card[5];
          deck = new poker.Card[52];
          currentCard = -1;
  
          for (int i = 0; i &lt; deck.length; i++) {
              deck[i] = new poker.Card(faces[i % 13], suits[i / 13]);
          }
  
          listModel.setSize(5);
  
          dealButton.addActionListener(this);
          finishButton.addActionListener(this);
          quitButton.addActionListener(this);
          finishButton.setEnabled(false);
  
          panel.add(dealButton);
          panel.add(finishButton);
          panel.add(quitButton);
          panel.add(label);
  
          jPanel.add(jList);
  
          add(balance, BorderLayout.CENTER);
          add(panel, BorderLayout.SOUTH);
          add(jPanel, BorderLayout.NORTH);
  
          setVisible(true);
      }
  
      class Card {
  
          @Override
          public String toString() {
              return face + " of " + suit + "\n";
          }
  
          public String getFace() {
              return face;
          }
  
          public String getSuit() {
              return suit;
          }
          private String face;
          private String suit;
  
          public Card(String s, String s1) {
              face = s;
              suit = s1;
          }
      }
  
      @Override
      public void valueChanged(ListSelectionEvent event) {
  
          int[] indices = jList.getSelectedIndices();
          if (indices.length &gt; 4) {
              JOptionPane.showMessageDialog(null, "You may only select four "
                      + "cards.");
              jList.clearSelection();
          }
      }
  
      @Override
      public void actionPerformed(ActionEvent event) {
  
          poker.Card card = null;
  
          if (event.getSource() == dealButton) {////////////////////////////
  
              finishButton.setEnabled(true);
              dealButton.setEnabled(false);
              label.setText(null);
  
              shuffle();//  reset deck
  
              for (int j = 0; j &lt; 5; j++) {
                  card = dealCard();
                  hand[j] = card;
                  listModel.setElementAt(hand[j], j);
  
              }
              if (money &lt; -1000) {
                  JOptionPane.showMessageDialog(null, "GAME OVER. You have no "
                          + "more money. ");
                  System.exit(0);
              }
              //evaluate();
              label.setText(displayDeal);
              displayDeal = null;
  
          } else if (event.getSource() == finishButton) {///////////////////////
  
              dealButton.setEnabled(true);
              finishButton.setEnabled(false);
              int c = 5;    //to get new card from deck 
  
              int maxIndex = jList.getMaxSelectionIndex();
  
              for (int l = 0; l &lt;= maxIndex; l++) {
                  if (jList.isSelectedIndex(l)) {
                      listModel.removeElementAt(l);
                      listModel.add(l, deck[c]);
                      c++;
                  }
              }
              jList.revalidate();
              jPanel.repaint();
  
              evaluate();
              giveMoney();
  
              label.setText(displayFinish);
              balance.setHorizontalAlignment(SwingConstants.CENTER);
              balance.setText("Money: $" + money );
  
  
              jList.clearSelection();
              displayFinish = null;
  
          } else if (event.getSource() == quitButton) {///////////////////////
  
              label.setText(null);
              balance.setHorizontalAlignment(SwingConstants.CENTER);
              balance.setText("You have won $" + money + " dollars.");
  
              int confirmed = JOptionPane.showConfirmDialog(null,
                      "Are you sure you want to exit?", "User Confirmation",
                      JOptionPane.YES_NO_OPTION);
              if (confirmed == JOptionPane.YES_OPTION) {
  
                  dealButton.setEnabled(false);
                  finishButton.setEnabled(false);
                  quitButton.setEnabled(false);
                  System.exit(0);
              }
          }
          this.setVisible(true);
          this.validate();
      }
      // giveMoney() keeps track of the money.
  
      public void giveMoney() {
  
          if (nothing) {
              money += -20.00;
              nothing = false;
          }
          if (pair) {
              money += 50.00;
              pair = false;
          }
          if (twoPair) {
              money += 100.00;
              twoPair = false;
          }
          if (threeKind) {
              money += 150.00;
              threeKind = false;           
          }
          if (straight) {
              money += 200.00;
              straight = false;
          }
          if (royalStraight) {
              money += 200.00;
              royalStraight = false;
          }
          if (flush) {
              money += 250.00;
              flush = false;
          }
          if (fullHouse) {
              money += 300;
          }
          if (fourKind) {
              money += 400.00;
              fourKind = false;
          }
          if (straightFlush) {
              money += 500.00;
              straightFlush = false;
          }
          if (RoyalFlush) {
              money += 1000.00;
              RoyalFlush = false;
          }
  
          this.validate();
      }
  
      // populates deck array 
      public void shuffle() {
  
          currentCard = -1;
          for (int i = 0; i &lt; deck.length; i++) {
              int j = (int) (Math.random() * 52D);
              poker.Card card = deck[i];
              deck[i] = deck[j];
              deck[j] = card;
          }
          this.validate();
      }
  
      public poker.Card dealCard() {
  
          if (++currentCard &lt; deck.length) {
              return deck[currentCard];
          } else {
              dealButton.setEnabled(false);
              return null;
          }
      }
  
      public void evaluate() {
  
          int i = 0;
          String setOf = null;
  
          nothing = false; pair = false; twoPair = false; threeKind = false;
          straight = false; royalStraight = false; flush = false;
          fullHouse = false; fourKind = false; straightFlush = false;
          RoyalFlush = false;
  
          if (hand[0].getSuit().equals(hand[1].getSuit())
                  &amp;&amp; hand[1].getSuit().equals(hand[2].getSuit())
                  &amp;&amp; hand[2].getSuit().equals(hand[3].getSuit())
                  &amp;&amp; hand[3].getSuit().equals(hand[4].getSuit())) {
              flush = true;
              displayDeal = "You have a flush";
              displayFinish = "Flush. Win $250.00 dollars.";
  
          }
          if (sort2(hand) &amp;&amp; !royalStraight) {
              straight = true;
              displayDeal = "You have a straight";
              displayFinish = "Straight. Win $200.00 dollars.";
          }
          if (straight &amp;&amp; flush) {
              straightFlush = true;
              straight = false;
              flush = false;
              displayDeal = "You have a straight Flush";
              displayFinish = "straight Flush. Win $500.00 dollars.";
  
          }
          if (straightFlush) {
              for (int j = 9; j &lt; 13; j++) {
                  if (hand[i].getFace().equals(faces[j])
                          &amp;&amp; hand[i + 1].getFace().equals(faces[j])
                          &amp;&amp; hand[i + 2].getFace().equals(faces[j])
                          &amp;&amp; hand[i + 3].getFace().equals(faces[j])
                          &amp;&amp; hand[i + 4].getFace().equals(faces[j])) {
                      straightFlush = false;
                      RoyalFlush = true;
                      displayDeal = "You have a royal Flush";
                      displayFinish = "Royal Flush. Win $1000.00 dollars.";
                  }
              }
          }
          if (straight) {
              for (int j = 9; j &lt; 13; j++) {
                  if (hand[i].getFace().equals(faces[j])
                          &amp;&amp; hand[i + 1].getFace().equals(faces[j])
                          &amp;&amp; hand[i + 2].getFace().equals(faces[j])
                          &amp;&amp; hand[i + 3].getFace().equals(faces[j])
                          &amp;&amp; hand[i + 4].getFace().equals(faces[j])) {
                      straight = false;
                      royalStraight = true;
                      displayDeal = "You have a royal straight";
                      displayFinish = "royal Straight. Win $200.00 dollars.";
                  }
              }
          }
          if (hand[0].getFace().equals(hand[1].getFace())
                  &amp;&amp; hand[0].getFace().equals(hand[2].getFace())
                  &amp;&amp; hand[0].getFace().equals(hand[3].getFace())
                  || hand[1].getFace().equals(hand[2].getFace())
                  &amp;&amp; hand[1].getFace().equals(hand[3].getFace())
                  &amp;&amp; hand[1].getFace().equals(hand[4].getFace())
                  || hand[0].getFace().equals(hand[1].getFace())
                  &amp;&amp; hand[0].getFace().equals(hand[3].getFace())
                  &amp;&amp; hand[0].getFace().equals(hand[4].getFace())
                  || hand[0].getFace().equals(hand[2].getFace())
                  &amp;&amp; hand[0].getFace().equals(hand[3].getFace())
                  &amp;&amp; hand[0].getFace().equals(hand[4].getFace())
                  || hand[0].getFace().equals(hand[1].getFace())
                  &amp;&amp; hand[0].getFace().equals(hand[2].getFace())
                  &amp;&amp; hand[0].getFace().equals(hand[4].getFace())) {
              fourKind = true;
              displayDeal = "You have a four of a kind";
              displayFinish = "Four of a kind. Win $400.00 dollars.";
          } else if (hand[0].getFace().equals(hand[1].getFace())
                  &amp;&amp; hand[2].getFace().equals(hand[3].getFace())
                  || hand[0].getFace().equals(hand[1].getFace())
                  &amp;&amp; hand[3].getFace().equals(hand[4].getFace())
                  || hand[1].getFace().equals(hand[2].getFace())
                  &amp;&amp; hand[3].getFace().equals(hand[4].getFace())
                  || hand[0].getFace().equals(hand[2].getFace())
                  &amp;&amp; hand[3].getFace().equals(hand[4].getFace())
                  || hand[0].getFace().equals(hand[1].getFace())
                  &amp;&amp; hand[2].getFace().equals(hand[4].getFace())
                  || hand[0].getFace().equals(hand[4].getFace())
                  &amp;&amp; hand[1].getFace().equals(hand[2].getFace())
                  || hand[0].getFace().equals(hand[3].getFace())
                  &amp;&amp; hand[1].getFace().equals(hand[2].getFace())
                  || hand[1].getFace().equals(hand[4].getFace())
                  &amp;&amp; hand[2].getFace().equals(hand[3].getFace())
                  || hand[0].getFace().equals(hand[3].getFace())
                  &amp;&amp; hand[1].getFace().equals(hand[4].getFace()) &amp;&amp; !fullHouse) {
              twoPair = true;
              displayDeal = "You have two pairs. ";
              displayFinish = "Two Pairs. Win $100.00 dollars.";
          } else if (hand[0].getFace().equals(hand[1].getFace())
                  &amp;&amp; hand[1].getFace().equals(hand[2].getFace())
                  &amp;&amp; hand[3].getFace().equals(hand[4].getFace())
                  || hand[0].getFace().equals(hand[1].getFace())
                  &amp;&amp; hand[1].getFace().equals(hand[3].getFace())
                  &amp;&amp; hand[2].getFace().equals(hand[4].getFace())
                  || hand[0].getFace().equals(hand[1].getFace())
                  &amp;&amp; hand[1].getFace().equals(hand[4].getFace())
                  &amp;&amp; hand[2].getFace().equals(hand[3].getFace())
                  || hand[0].getFace().equals(hand[3].getFace())
                  &amp;&amp; hand[3].getFace().equals(hand[4].getFace())
                  &amp;&amp; hand[1].getFace().equals(hand[2].getFace())
                  || hand[1].getFace().equals(hand[2].getFace())
                  &amp;&amp; hand[2].getFace().equals(hand[4].getFace())
                  &amp;&amp; hand[0].getFace().equals(hand[3].getFace())
                  || hand[2].getFace().equals(hand[3].getFace())
                  &amp;&amp; hand[3].getFace().equals(hand[4].getFace())
                  &amp;&amp; hand[0].getFace().equals(hand[1].getFace())
                  || hand[1].getFace().equals(hand[2].getFace())
                  &amp;&amp; hand[2].getFace().equals(hand[3].getFace())
                  &amp;&amp; hand[0].getFace().equals(hand[4].getFace()) &amp;&amp; !straightFlush) {
              fullHouse = true;
              displayDeal = "You have a full house.";
              displayFinish = "Full House. Win $300.00 dollars.";
          }
          if ((hand[0].getFace().equals(hand[1].getFace())
                  &amp;&amp; hand[1].getFace().equals(hand[2].getFace())
                  || hand[0].getFace().equals(hand[2].getFace())
                  &amp;&amp; hand[0].getFace().equals(hand[4].getFace())
                  || hand[0].getFace().equals(hand[2].getFace())
                  &amp;&amp; hand[0].getFace().equals(hand[3].getFace())
                  || hand[1].getFace().equals(hand[3].getFace())
                  &amp;&amp; hand[1].getFace().equals(hand[4].getFace())
                  || hand[0].getFace().equals(hand[1].getFace())
                  &amp;&amp; hand[1].getFace().equals(hand[3].getFace())
                  || hand[0].getFace().equals(hand[1].getFace())
                  &amp;&amp; hand[1].getFace().equals(hand[4].getFace())
                  || hand[1].getFace().equals(hand[2].getFace())
                  &amp;&amp; hand[2].getFace().equals(hand[4].getFace())
                  || hand[2].getFace().equals(hand[3].getFace())
                  &amp;&amp; hand[3].getFace().equals(hand[4].getFace())
                  || hand[1].getFace().equals(hand[2].getFace())
                  &amp;&amp; hand[2].getFace().equals(hand[3].getFace()))
                  &amp;&amp; !twoPair &amp;&amp; !fullHouse &amp;&amp; !fourKind) {
              threeKind = true;          
              displayDeal = "You have three of a kind of " + setOf + "s.";
              displayFinish = "three of a kind of " + setOf + "s. Win $150.00 dollars.";
          } else if ((hand[i].getFace().equals(hand[i + 1].getFace())
                  || hand[i].getFace().equals(hand[i + 2].getFace())
                  || hand[i].getFace().equals(hand[i + 3].getFace())
                  || hand[i].getFace().equals(hand[i + 4].getFace())
                  || hand[i + 1].getFace().equals(hand[i + 2].getFace())
                  || hand[i + 1].getFace().equals(hand[i + 3].getFace())
                  || hand[i + 1].getFace().equals(hand[i + 4].getFace())
                  || hand[i + 2].getFace().equals(hand[i + 3].getFace())
                  || hand[i + 2].getFace().equals(hand[i + 4].getFace())
                  || hand[i + 3].getFace().equals(hand[4].getFace()))
                  &amp;&amp; !twoPair &amp;&amp; !threeKind &amp;&amp; !fullHouse) {
              pair = true;
              displayDeal = "You have a pair of " + setOf + "s.";
              displayFinish = "Pair of " + setOf + "s. Win $50.00 dollars.";
          }
          if (!pair &amp;&amp; !twoPair &amp;&amp; !threeKind &amp;&amp; !fullHouse &amp;&amp; !fourKind
                  &amp;&amp; !straight &amp;&amp; !flush &amp;&amp; !straightFlush &amp;&amp; !RoyalFlush
                  &amp;&amp; !royalStraight) {
              nothing = true;
              displayDeal = "You have nothing.";
              displayFinish = "Nothing. Lose 20.00 dollars.";
          }
          this.validate();
  
      }
  
      public int getFaceValue2(poker.Card card) {
          String s = card.getFace();
          byte byte0 = 0;
          if (s.equals(faces[0])) {
              byte0 = 2;
          }
          if (s.equals(faces[1])) {
              byte0 = 3;
          }
          if (s.equals(faces[2])) {
              byte0 = 4;
          }
          if (s.equals(faces[3])) {
              byte0 = 5;
          }
          if (s.equals(faces[4])) {
              byte0 = 6;
          }
          if (s.equals(faces[5])) {
              byte0 = 7;
          }
          if (s.equals(faces[6])) {
              byte0 = 8;
          }
          if (s.equals(faces[7])) {
              byte0 = 9;
          }
          if (s.equals(faces[8])) {
              byte0 = 10;
          }
          if (s.equals(faces[9])) {
              byte0 = 11;
          }
          if (s.equals(faces[10])) {
              byte0 = 12;
          }
          if (s.equals(faces[11])) {
              byte0 = 13;
          }
          if (s.equals(faces[12])) {
              byte0 = 14;
          }
          return byte0;
      }
  
      public boolean sort2(poker.Card acard[]) {
          boolean flag = false;
          int ai[] = new int[5];
          for (int i = 0; i &lt; 5; i++) {
              ai[i] = getFaceValue2(acard[i]);
          }
  
          for (int k = 1; k &lt; ai.length; k++) {
              for (int l = 0; l &lt; ai.length - 1; l++) {
                  if (ai[l] &gt; ai[l + 1]) {
                      int j = ai[l];
                      ai[l] = ai[l + 1];
                      ai[l + 1] = j;
                  }
              }
  
          }
  
          for (int i1 = 0; i1 &lt; ai.length - 1; i1++) {
              if (ai[0] + 1 == ai[1] &amp;&amp; ai[1] + 1 == ai[2] &amp;&amp; ai[2] + 1
                      == ai[3] &amp;&amp; ai[3] + 1 == ai[4]) {
                  flag = true;
              } else {
                  flag = false;
              }
          }
  
          if (flag) {
              System.out.print(hand[0] + " " + hand[1] + " " + hand[2] + " "
                      + hand[3] + " " + hand[4]);
          }
          System.out.print(ai[0] + " " + ai[1] + " " + ai[2] + " " + ai[3]
                  + " " + ai[4]);
          return flag;
      }
  }
  </code></pre>