【发布时间】:2011-04-21 16:07:02
【问题描述】:
我在下面附加的程序中更新我的 GUI 上的 JLabels 文本时遇到问题。
尽管我已将每个 JLabel 分配给数组中的相应索引,但 lblArray 似乎为空。
我确实尝试通过从 JLabels 中删除静态修饰符以及可能的其他一些相关变量(如 lblArray)来尝试使用静态修饰符,并在 main() 方法中实例化一个 Blackjack 类并从该新对象访问 JLabels。但是生成的界面是喜怒无常的,每次结果都不一样,但基本上是在3种GUI故障之间交替出现,有时可以更新,有时不能。
GUI 是从 NetBeans 6.9 中的 GUI Builder 生成的。
我怀疑与静态修饰符有关。如果是这个问题,请向我解释。此外,请问我们如何在静态和非静态变量或方法之间实际访问,尤其是从静态 main() 方法访问非静态变量?
顺便说一句,我遇到的另一个问题是没有足够的灵活性来修改从 GUI Builder 生成的编码。有没有办法灵活修改编码?
我在这里附上我的编码摘录,因为原始编码可能很长。我已经包含了我认为与此问题相关的任何内容。在 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());
}
}
}
真的希望你能帮助我,因为我正在急于完成这个任务。非常感谢!
【问题讨论】:
标签: java user-interface netbeans-6.9