2012-12-06 77 views
0

我有一個hangmanframe,welcomeframe和大型機,我想追加在大型機上星(*)當你贏得一個劊子手遊戲的Java的StringBuilder - 追加字符

HangmanFrame:

public void win(){ 
    JOptionPane.showMessageDialog(null, "Congrats! The word was " + GuessWord); 
    MainFrame.totalStars.append("*"); 
    MainFrame.totalLabel.setText(MainFrame.stars); 
    setVisible(false); 
    MainFrame.hangmanButton.setEnabled(false); 
    MainFrame.returnMain(); 
} 

大型機:

public static final StringBuilder totalStars = new StringBuilder(); 
    public static String stars = totalStars.toString(); 

    public static void returnMain(){ 
      totalStars.append("* "); 
      totalLabel.setText(stars); 
      WelcomeFrame.playButton.doClick(); 
    } 

WelcomeFrame:

private void playButtonActionPerformed(java.awt.event.ActionEvent evt) { 
    String userName = nameText.getText(); 

    // Open MainFrame 
    MainFrame MFrame = new MainFrame(); 
    MFrame.setVisible(true); 
    setVisible(false); 
    MainFrame.welcomeLabel.setText("Welcome " + userName + "!"); 
    MainFrame.totalStars.append("* "); 
    MainFrame.totalStarsLabel.setText(MainFrame.stars); 
    } 

我有一個標籤(totalLabel),我想添加星號(*)。但是,當方法在HangmanFrame中運行時,它會轉到PlayFrame,但不會添加任何明星。

任何人都可以看到我做錯了什麼?

解決:

改變方法名returnMain()

改變的 「明星」 所有實例 「totalStars.toString()」

+1

此代碼甚至不會編譯:「迴歸」是一個關鍵詞,不能用作大型機上市的方法的名稱。關於另一個問題,我建議遵循良好的面向對象操作規範,並在getter/setter方法中正確地封裝字段。 –

+0

我改變了閱讀'returnMain()'的方法,謝謝 – CodeAddict

回答

1

首先,你的程序將無法編譯,因爲public static void return() {...,我想你應該知道return是一個保留字在Java中。

二,您製作public static String stars = totalStars.toString();即可,但 並不意味着stars將始終包含什麼totalString具有。這只是瞬間的。

你一定要使用totalLabel.setText(totalStars.toString());

+0

謝謝!它的工作,但它使多個明星,我只想要一個? – CodeAddict

+0

@CodeAddict upvote我的答案然後=)如果你想要一個星號,追加一個星號,而不是更多。 – Juvanis

+0

沒問題,所以當你贏得hang子手遊戲時,代碼讀取'MainFrame.totalStars.append(「*」);'爲什麼這個代碼只能被讀取一次? – CodeAddict