Возникли проблемы с обновлением текстов JLabel;относящиеся к GUI Builder из Netbeans 6.9 - PullRequest
0 голосов
/ 21 апреля 2011

У меня проблема с обновлением текстов 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());
        }
    }
    }

Действительно надеюсь, что вы можете мне помочь, так как я тороплюсь с этим из-за назначения. Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 21 апреля 2011

Вы не инициализировали значение целого числа с именем Sequence? Вероятно, поэтому нулевое значение было присвоено переменной Sequence.

0 голосов
/ 21 апреля 2011

Графический интерфейс (и вместе с ним его атрибуты / члены), возможно, не был инициализирован при помещении меток в массив, поскольку создание графического интерфейса выполняется в другом потоке.

Удалите ключевое слово staticи переместите свой код, назначающий метки, в конструктор Блэкджек.

...