2012-09-06 72 views
0

我正在寫一個小程序,它將隨機挑選10張牌並將它們顯示在屏幕上。但是,我收到一個.class錯誤和一個;當我嘗試傳遞一個String []時需要錯誤。任何人幫助?這是我的代碼:。Java小程序中的類錯誤

import java.awt.Graphics; 
import java.awt.Color; 
import java.awt.Image; 
import java.applet.Applet; 
import java.lang.Math; 
import java.util.Random; 

public class unit12Assignment extends Applet 
{ 
Image card1 ... card52; 

public void init() 
{ 
    card1 = getImage(getDocumentBase(), "c1.gif"); 
    ... 
    card52 = getImage(getDocumentBase(), "sk.gif"); 
} 

public void getCards() 
{ 
    String cardNumber; 
    double cardRandom; 
    int cardRandomNumber; 
    String[] cardSelection = new String[10]; 
    Random ran = new Random(); 

    for (int number = 0; number <= 9;) 
    { 
     cardRandom = ran.nextInt(52) + 1; 
     cardRandomNumber = (int) Math.round(cardRandom); 

     if (cardRandomNumber > 0 && cardRandomNumber <= 52) 
     { 
      cardNumber = "card" + cardRandomNumber; 
      number++; 
     } 
    } 
    paint(String[] cardSelection); 
} 

public void paint(Graphics g, String[] card) 
{ 
    setBackground(Color.green); 
    g.drawImage(card[0], 10, 10, this); 
    g.drawImage(card[1], 90, 10, this); 
    g.drawImage(card[2], 170, 10, this); 
    g.drawImage(card[3], 250, 10, this); 
} 

}

+0

在第三個千禧年,我們通常在'Applet'上使用'JApplet'的原因很多。這裏的主要原因是'雙緩衝'。 –

回答

2

這條線:

paint(String[] cardSelection); 

應該在語法上是

paint(cardSelection); 

你只需要編寫的類型(例如String[])前一個變量,當你第一次聲明它。從那裏它可以被稱爲它的名字。

我也注意到,paint需要Graphics參數以及一個String[],所以你需要通過在還有:

Graphics g = getGraphicsSomehow(); 
paint(g, cardSelection); 

編輯:看到Andrew Thompson's answer免責聲明的使用Graphics用另一種解決方案。

+0

paint方法簽名需要兩個參數:'public void paint(Graphics g,String [] card)'。他不需要傳遞'Graphics'參數的參數嗎? –

+0

@DJQuimby剛剛編輯提到。謝謝。 –

+0

只是改變了它,這似乎也是一個問題。從來沒有學會如何使用它只有它那裏。不過,你回答了我的問題。謝謝! –

1

涉及getGraphics()的任何內容都是脆弱的解決方案。

如果用戶拖動另一個其他應用程序。通過瀏覽器並覆蓋小程序,然後最小化其他應用程序,它很可能會擦除自定義繪製的像素。請參閱Performing Custom Painting 以瞭解如何正確繪製(當被告知時,它會分解爲「繪畫」)。

另一種方法是使用BufferedImage進行渲染並將其顯示在JLabel中。根據需要繪製圖像,然後重新繪製標籤。