2012-05-11 22 views
0

このアプレットをアプリケーションにする方法を知っている人はいますか?私は "アプレットを拡張"を削除した後、それは動作しません。私はそれをアプリケーションに変える方法や、 "拡張する"の後に何を書くのか分からない。このコードをアプレットからスタンドアロンアプリケーションに変更するには

import java.awt.*; 
    import java.awt.event.*; 
    import javax.swing.*; 

    public class BlackjackGUI extends JApplet { 

     public void init() { 

init()メソッドは、コンポーネントを作成し、アプレットをレイアウトします。 BlackjackCanvasはレイアウトのCENTERポジションを占めます。 下部には3つのボタンを保持するパネルがあります。 BlackjackCanvasオブジェクトは、ボタン からのイベントをリッスンし、プログラムのすべての実際の作業を行います。

setBackground(new Color(130,50,40)); 

      BlackjackCanvas board = new BlackjackCanvas(); 
      getContentPane().add(board, BorderLayout.CENTER); 

      JPanel buttonPanel = new JPanel(); 
      buttonPanel.setBackground(new Color(220,200,180)); 
      getContentPane().add(buttonPanel, BorderLayout.SOUTH); 

      JButton hit = new JButton("Hit!"); 
      hit.addActionListener(board); 
      buttonPanel.add(hit); 

      JButton stand = new JButton("Stand!"); 
      stand.addActionListener(board); 
      buttonPanel.add(stand); 

      JButton newGame = new JButton("New Game"); 
      newGame.addActionListener(board); 
      buttonPanel.add(newGame); 

     } // end init() 

     public Insets getInsets() { 
      // Specify how much space to leave between the edges of 
      // the applet and the components it contains. The background 
      // color shows through in this border. 
      return new Insets(3,3,3,3); 
     } 


     // --- The remainder of this class consists of a nested class --- 


     class BlackjackCanvas extends JPanel implements ActionListener { 

      // A nested class that displays the card game and does all the work 
      // of keeping track of the state and responding to user events. 

      Deck deck;   // A deck of cards to be used in the game. 

      BlackjackHand dealerHand; // Hand containing the dealer's cards. 
      BlackjackHand playerHand; // Hand containing the user's cards. 

      String message; // A message drawn on the canvas, which changes 
          // to reflect the state of the game. 

      boolean gameInProgress; // Set to true when a game begins and to false 
            // when the game ends. 

      Font bigFont;  // Font that will be used to display the message. 
      Font smallFont; // Font that will be used to draw the cards. 


      BlackjackCanvas() { 
       // Constructor. Creates fonts and starts the first game. 
      setBackground(new Color(0,120,0)); 
      smallFont = new Font("SansSerif", Font.PLAIN, 12); 
      bigFont = new Font("Serif", Font.BOLD, 14); 
      doNewGame(); 
      } 


      public void actionPerformed(ActionEvent evt) { 
       // Respond when the user clicks on a button by calling 
       // the appropriate procedure. Note that the canvas is 
       // registered as a listener in the BlackjackGUI class. 
      String command = evt.getActionCommand(); 
      if (command.equals("Hit!")) 
       doHit(); 
      else if (command.equals("Stand!")) 
       doStand(); 
      else if (command.equals("New Game")) 
       doNewGame(); 
      } 


      void doHit() { 
       // This method is called when the user clicks the "Hit!" button. 
       // First check that a game is actually in progress. If not, give 
       // an error message and exit. Otherwise, give the user a card. 
       // The game can end at this point if the user goes over 21 or 
       // if the user has taken 5 cards without going over 21. 
      if (gameInProgress == false) { 
       message = "Click \"New Game\" to start a new game."; 
       repaint(); 
       return; 
      } 
      playerHand.addCard(deck.dealCard()); 
      if (playerHand.getBlackjackValue() > 21) { 
       message = "You've busted! Sorry, you lose."; 
       gameInProgress = false; 
      } 
      else if (playerHand.getCardCount() == 5) { 
       message = "You win by taking 5 cards without going over 21."; 
       gameInProgress = false; 
      } 
      else { 
       message = "You have " + playerHand.getBlackjackValue() + ". Hit or Stand?"; 
      } 
      repaint(); 
      } 


      void doStand() { 
        // This method is called when the user clicks the "Stand!" button. 
        // Check whether a game is actually in progress. If it is, 
        // the game ends. The dealer takes cards until either the 
        // dealer has 5 cards or more than 16 points. Then the 
        // winner of the game is determined. 
      if (gameInProgress == false) { 
       message = "Click \"New Game\" to start a new game."; 
       repaint(); 
       return; 
      } 
      gameInProgress = false; 
      while (dealerHand.getBlackjackValue() <= 16 && dealerHand.getCardCount() < 5) 
       dealerHand.addCard(deck.dealCard()); 
      if (dealerHand.getBlackjackValue() > 21) 
       message = "You win! Dealer has busted with " + dealerHand.getBlackjackValue() + "."; 
      else if (dealerHand.getCardCount() == 5) 
       message = "Sorry, you lose. Dealer took 5 cards without going over 21."; 
      else if (dealerHand.getBlackjackValue() > playerHand.getBlackjackValue()) 
       message = "Sorry, you lose, " + dealerHand.getBlackjackValue() 
                + " to " + playerHand.getBlackjackValue() + "."; 
      else if (dealerHand.getBlackjackValue() == playerHand.getBlackjackValue()) 
       message = "Sorry, you lose. Dealer wins on a tie."; 
      else 
       message = "You win, " + playerHand.getBlackjackValue() 
                + " to " + dealerHand.getBlackjackValue() + "!"; 
      repaint(); 
      } 


      void doNewGame() { 
       // Called by the constructor, and called by actionPerformed() if 
       // the use clicks the "New Game" button. Start a new game. 
       // Deal two cards to each player. The game might end right then 
       // if one of the players had blackjack. Otherwise, gameInProgress 
       // is set to true and the game begins. 
      if (gameInProgress) { 
        // If the current game is not over, it is an error to try 
        // to start a new game. 
       message = "You still have to finish this game!"; 
       repaint(); 
       return; 
      } 
      deck = new Deck(); // Create the deck and hands to use for this game. 
      dealerHand = new BlackjackHand(); 
      playerHand = new BlackjackHand(); 
      deck.shuffle(); 
      dealerHand.addCard(deck.dealCard()); // Deal two cards to each player. 
      dealerHand.addCard(deck.dealCard()); 
      playerHand.addCard(deck.dealCard()); 
      playerHand.addCard(deck.dealCard()); 
      if (dealerHand.getBlackjackValue() == 21) { 
       message = "Sorry, you lose. Dealer has Blackjack."; 
       gameInProgress = false; 
      } 
      else if (playerHand.getBlackjackValue() == 21) { 
       message = "You win! You have Blackjack."; 
       gameInProgress = false; 
      } 
      else { 
       message = "You have " + playerHand.getBlackjackValue() + ". Hit or stand?"; 
       gameInProgress = true; 
      } 
      repaint(); 
      } // end newGame(); 


      public void paintComponent(Graphics g) { 
       // The paint method shows the message at the bottom of the 
       // canvas, and it draws all of the dealt cards spread out 
       // across the canvas. 

      super.paintComponent(g); // fill with background color. 

      g.setFont(bigFont); 
      g.setColor(Color.green); 
      g.drawString(message, 10, getSize().height - 10); 

      // Draw labels for the two sets of cards. 

      g.drawString("Dealer's Cards:", 10, 23); 
      g.drawString("Your Cards:", 10, 153); 

      // Draw dealer's cards. Draw first card face down if 
      // the game is still in progress, It will be revealed 
      // when the game ends. 

      g.setFont(smallFont); 
      if (gameInProgress) 
       drawCard(g, null, 10, 30); 
      else 
       drawCard(g, dealerHand.getCard(0), 10, 30); 
      for (int i = 1; i < dealerHand.getCardCount(); i++) 
       drawCard(g, dealerHand.getCard(i), 10 + i * 90, 30); 

      // Draw the user's cards. 

      for (int i = 0; i < playerHand.getCardCount(); i++) 
       drawCard(g, playerHand.getCard(i), 10 + i * 90, 160); 

      } // end paint(); 


      void drawCard(Graphics g, Card card, int x, int y) { 
        // Draws a card as a 80 by 100 rectangle with 
        // upper left corner at (x,y). The card is drawn 
        // in the graphics context g. If card is null, then 
        // a face-down card is drawn. (The cards are 
        // rather primitive.) 
      if (card == null) { 
        // Draw a face-down card 
       g.setColor(Color.blue); 
       g.fillRect(x,y,80,100); 
       g.setColor(Color.white); 
       g.drawRect(x+3,y+3,73,93); 
       g.drawRect(x+4,y+4,71,91); 
      } 
      else { 
       g.setColor(Color.white); 
       g.fillRect(x,y,80,100); 
       g.setColor(Color.gray); 
       g.drawRect(x,y,79,99); 
       g.drawRect(x+1,y+1,77,97); 
       if (card.getSuit() == Card.DIAMONDS || card.getSuit() == Card.HEARTS) 
        g.setColor(Color.red); 
       else 
        g.setColor(Color.black); 
       g.drawString(card.getValueAsString(), x + 10, y + 30); 
       g.drawString("of", x+ 10, y + 50); 
       g.drawString(card.getSuitAsString(), x + 10, y + 70); 
      } 
      } // end drawCard() 


     } // end nested class BlackjackCanvas 


    } // end class BlackjackGUI 
+0

すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。 –

答えて

2

あなたのゲームにアプレットベースのアプローチを使用している場合は、そのままにしておきたいことがあります。アプレットを保持するラッパーウィンドウを作成することができます。このラッパーウィンドウは、アプレットを正常に動作させることができます。

public static void main(String[] args) { 
    JFrame mainWindow = new JFrame("Blackjack"); // You can change "Blackjack" to anything, it will display that as the window title 
    mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    mainWindow.setResizeable(false); // If your applet can handle resizing, you can remove this line 
    BackjackGUI applet = new BlackjackGUI(); 
    applet.init(); 
    mainWindow.add(applet); 
    mainWindow.setSize(applet.getSize()); 
    mainWindow.setVisible(true); 
} 

これは、あなたのアプリは、アプレットとスタンドアロンアプリケーションの両方として実行することができます:あなたがする必要がありますすべてがそうのように、アプレットのクラスにmainメソッドを追加することです。ジェイクキングス方法等

0

同様のアプローチ:メインパネルを生産する方法に関するINIT-方法から関連純粋アプレットない

移動すべて。ほとんどの場合、このようなメインパネルがあります。それ以外の場合は定義できます。

アプレットのinit-methodで、この新しいmakeMainPanel()を呼び出します。

と並行して、メインのメソッドを作成し、アプリケーションをSwing JFrameとして起動します。メインフレームを作成し、そのメソッドを持つ同じPanelをメインフレームに追加し、純粋にアプリケーションの典型的なものをmainで行います。

これでいずれかの方法で呼び出すことができます。

関連する問題