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