2011-04-21 49 views
0

我在下面的程序中更新我的GUI上的JLabels文本時出現問題。更新JLabel文本時出現問題;與Netbeans 6.9的GUI生成器相關6.9

儘管我已將每個JLabel分配給數組中的相應索引,但lblArray似乎爲空。

我曾嘗試通過從JLabels中刪除靜態修改器來試驗靜態修改器,例如lblArray,以及在main()方法中實例化一個Blackjack類並從該新對象訪問JLabel。但是由此產生的界面是氣質的,每次都會有不同的結果,但基本上在3種GUI故障之間交替出現,有時可能會更新,但有些時候則不能。

GUI是從NetBeans 6.9中的GUI生成器生成的。

我懷疑有一些與靜態修改器有關。請向我解釋是否是這個問題。此外,我是否可以知道我們如何實際訪問靜態和非靜態變量或方法,特別是從靜態main()方法訪問非靜態變量?

順便說一句,我遇到的另一個問題是沒有足夠的靈活性來修改從GUI生成器生成的編碼。有沒有辦法靈活地修改編碼?

我附上了我的代碼片段,因爲原始代碼可能很長。我已經包括了我認爲與這個問題有關的所有內容。在initComponents()方法中,GUI Builder會自動生成代碼,我從下面的代碼中省略。

public class Blackjack extends javax.swing.JFrame { 

static Deck deck = new Deck(1); 
static int numberOfPlayer = 1; 
static Player playerArray[]; 
static int sequence; 
static JLabel lblArray[]; 

/** Creates new form Blackjack */ 
public Blackjack() { 
    initComponents(); 
} 

// Variables declaration - do not modify 
private javax.swing.JButton btnHit; 
private javax.swing.JButton btnStand; 
private javax.swing.JButton btnSurrender; 
private static javax.swing.JLabel lblCard1; 
private static javax.swing.JLabel lblCard10; 
private static javax.swing.JLabel lblCard2; 
private static javax.swing.JLabel lblCard3; 
private static javax.swing.JLabel lblCard4; 
private static javax.swing.JLabel lblCard5; 
private static javax.swing.JLabel lblCard6; 
private static javax.swing.JLabel lblCard7; 
private static javax.swing.JLabel lblCard8; 
private static javax.swing.JLabel lblCard9; 
private javax.swing.JLabel lblDealer; 
private javax.swing.JLabel lblPlayer; 
private javax.swing.JLabel lblTitle; 
private javax.swing.JPanel pnlDealer; 
private javax.swing.JPanel pnlOptions; 
javax.swing.JPanel pnlPlayer; 
// End of variables declaration 

public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new Blackjack().setVisible(true); 
     } 
    }); 

    lblArray = new JLabel[10]; 
    lblArray[0] = lblCard1; 
    lblArray[1] = lblCard2; 
    lblArray[2] = lblCard3; 
    lblArray[3] = lblCard4; 
    lblArray[4] = lblCard5; 
    lblArray[5] = lblCard6; 
    lblArray[6] = lblCard7; 
    lblArray[7] = lblCard8; 
    lblArray[8] = lblCard9; 
    lblArray[9] = lblCard10; 
    } 

    public static void initialPlay() { 

    //Drawing of first 2 cards 
    for (int i=0; i<2; i++) { 
     Card draw = deck.draw(); 

     if (!playerArray[sequence].isDealer()) { 
      lblArray[i].setText(draw.getName()); 
     } 
     else { 
      lblArray[i+5].setText(draw.getName()); 
     } 
    } 
    } 

真的希望你能幫助我,因爲我正在趕緊分配這份工作。非常感謝!

回答

0

當你將標籤放入數組時,gui(及其屬性/成員)可能沒有被初始化,因爲gui的創建是在另一個線程中完成的。

刪除靜態關鍵字並移動您的代碼將標籤分配到二十一點構造函數。

+0

哦!我錯過的一件事是,它們是在由GUI Builder自動生成的initComponents()方法中初始化的。 – 2011-04-21 16:15:08

+0

嘿,泰迪爾。再次通過你的意見,看看它的作品!我把我所有的邏輯從main()方法移動到Blackjack()構造函數,並移除了靜態修飾符&一切正常!我早些時候已經知道這一點,但自從我上次觸及GUI後的一段時間以來,我一定已經忘記了它。無論如何,Thx很多!不知道「在另一個線程中完成GUI創建」的意思。 =) – 2011-04-23 06:01:44

0

您還沒有初始化稱爲序列的整數值?這可能是爲什麼空值被分配給變量序列。

+0

Thx的建議,MrCool!這不是特定於這個問題,但我忘了初始化「序列」變量。 =) – 2011-04-23 06:03:32