아래 첨부 된 프로그램에서 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());
}
}
}
내가 임무 지명을 위해이 작업을 서둘러야하므로 정말 도움이 되길 바랍니다. 고마워요!
오! 내가 놓친 한 가지는 initComponents() 메소드에서 초기화된다는 것입니다. initComponents() 메소드는 GUI 빌더에 의해 자동으로 생성됩니다. –
안녕하세요, 테딜. 통해 통해 통보 조언을 다시 보았다 & 그것은 작동합니다! 모든 로직을 main() 메소드에서 Blackjack() 생성자로 옮겼다. 정적 수정 자 & 모든 것이 작동한다. 나는 실제로 이것을 이전에 알고 있었지만, GUI를 마지막으로 사용한 이후로 잠시 잊어 버린 것 같습니다. 어쨌든, 많이 Thx! "GUI 작성이 다른 스레드에서 수행되는 것"이 무엇인지는 확실하지 않습니다. =) –