我在下面的程序中更新我的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());
}
}
}
真的希望你能幫助我,因爲我正在趕緊分配這份工作。非常感謝!
哦!我錯過的一件事是,它們是在由GUI Builder自動生成的initComponents()方法中初始化的。 – 2011-04-21 16:15:08
嘿,泰迪爾。再次通過你的意見,看看它的作品!我把我所有的邏輯從main()方法移動到Blackjack()構造函數,並移除了靜態修飾符&一切正常!我早些時候已經知道這一點,但自從我上次觸及GUI後的一段時間以來,我一定已經忘記了它。無論如何,Thx很多!不知道「在另一個線程中完成GUI創建」的意思。 =) – 2011-04-23 06:01:44