2011-04-21 3 views
0

아래 첨부 된 프로그램에서 GUI의 JLabels 텍스트를 업데이트하는 데 문제가 있습니다.JLabel 텍스트를 업데이트하는 데 문제가 있습니다. Netbeans 6.9의 GUI 빌더 관련

배열의 해당 색인에 각 JLabel을 할당 했더라도 lblArray가 null로 표시됩니다.

JLabels &에서 static 수정자를 제거하고 lblArray와 같은 다른 관련 변수를 사용하고 main() 메서드 내부에서 Blackjack 클래스를 인스턴스화하고 해당 새 객체에서 JLabels에 액세스하여 정적 수정자를 실험 해 보았습니다. 그러나 그 결과 인터페이스는 매번 변화하는 결과를 가지지 만, 때로는 업데이트 할 수 있지만 다른 시간에는 볼 수없는 3 가지 종류의 GUI 결함을 교대로 반복합니다.

GUI는 NetBeans 6.9의 GUI 작성기에서 생성됩니다.

정적 수정 자와 관련이 있다고 생각됩니다. 그게 문제라면 나 한테 설명 해줘. 게다가 정적 static() 메서드에서 비 정적 변수에 액세스하는 정적 및 비 정적 변수 또는 메서드 사이에 실제로 어떻게 액세스 할 수 있는지 알 수 있습니까?

Btw, 내가 만난 또 다른 문제점은 GUI 빌더에서 생성 된 코딩을 수정하는 데 충분한 유연성이없는 것입니다. 코딩을 유연하게 수정할 수있는 방법이 있습니까?

원본 코딩이 길어질 수 있으므로 여기에서 코딩 한 발췌 내용을 첨부 할 예정입니다. 나는이 문제와 관련이 있다고 생각하는 것을 이미 포함시켰다. initComponents() 메소드에는 GUI 빌더에서 자동으로 코드가 생성됩니다.이 코드는 아래 코딩을 생략합니다.

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()); 
     } 
    } 
    } 

내가 임무 지명을 위해이 작업을 서둘러야하므로 정말 도움이 되길 바랍니다. 고마워요!

답변

0

gui 작성이 다른 스레드에서 수행되기 때문에 레이블을 배열에 넣을 때 gui (및 해당 속성/멤버)가 초기화되지 않았을 수 있습니다.

정적 키워드를 제거하고 라벨을 블랙 잭 생성자에 할당하여 코드를 이동하십시오.

+0

오! 내가 놓친 한 가지는 initComponents() 메소드에서 초기화된다는 것입니다. initComponents() 메소드는 GUI 빌더에 의해 자동으로 생성됩니다. –

+0

안녕하세요, 테딜. 통해 통해 통보 조언을 다시 보았다 & 그것은 작동합니다! 모든 로직을 main() 메소드에서 Blackjack() 생성자로 옮겼다. 정적 수정 자 & 모든 것이 작동한다. 나는 실제로 이것을 이전에 알고 있었지만, GUI를 마지막으로 사용한 이후로 잠시 잊어 버린 것 같습니다. 어쨌든, 많이 Thx! "GUI 작성이 다른 스레드에서 수행되는 것"이 ​​무엇인지는 확실하지 않습니다. =) –

0

정수라는 값을 초기화하지 않았습니까? 아마도 null 값이 변수 Sequence에 할당 된 이유 일 것입니다.

+0

조언을 구하는 사람, MrCool! 이 문제와 관련이있는 것은 아니지만 실제로 "시퀀스"변수를 초기화하는 것을 잊었습니다. =) –

관련 문제