У меня проблема с обновлением текстов JLabels в моем графическом интерфейсе в прилагаемой ниже программе.
Кажется, что lblArray равен нулю, хотя я назначил каждый JLabel соответствующему индексу в массиве.
Я попытался поэкспериментировать со статическим модификатором, удалив статический модификатор из JLabels и, возможно, некоторых других соответствующих переменных, таких как lblArray, и создав экземпляр класса Blackjack внутри метода main () и получив доступ к JLabels из этого нового объекта. Но получающийся интерфейс является темпераментным, с переменными результатами каждый раз, но в основном чередуется между 3 видами сбоя GUI, который иногда может обновляться, но в другое время - нет.
GUI генерируется из GUI Builder в NetBeans 6.9.
Я подозреваю, что есть какое-то отношение к модификатору статики. Пожалуйста, объясните мне, если это та проблема. Кроме того, могу ли я узнать, как мы на самом деле получаем доступ между статическими и нестатическими переменными или методами, особенно с доступом к нестатическим переменным из статического метода main ()?
Кстати, другая проблема, с которой я столкнулся, заключается в недостаточной гибкости для изменения кода, сгенерированного из GUI Builder. Есть ли способ гибко изменить кодировку?
Здесь я прилагаю выдержки из моего кодирования, так как оригинальное кодирование может быть длинным. Я уже включил все, что я думаю, имеет отношение к этой проблеме. Существует автоматическая генерация кода из GUI Builder в методе initComponents (), который я опускаю в приведенной ниже кодировке.
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());
}
}
}
Действительно надеюсь, что вы можете мне помочь, так как я тороплюсь с этим из-за назначения. Большое спасибо!