2012-12-18 41 views
2

所以我需要做的就是使用JTextField獲取用戶輸入的字符串形式,而我能做到這一點的一部分,我遇到了麻煩從方法的字符串到別處分析它在節目中,這裏是我到目前爲止有:Java:使用ActionListener,我需要從文本字段獲取用戶輸入並使用它,我遇到了問題

import javax.swing.* ; 
import java.awt.event.* ; 
import java.util.* ; 
class Games extends JFrame implements ActionListener 
{ 
    JPanel pnl = new JPanel() ; 
    JTextField input = new JTextField(38) ; 
    JTextArea output = new JTextArea(6, 37) ; 
    JScrollPane pane = new JScrollPane(output) ; 
    String inputString ; 

public Games() 
{ 
    super("Text Based RPG") ; 
    setSize(600,200) ; 
    setDefaultCloseOperation(EXIT_ON_CLOSE) ; 
    output.setLineWrap(true) ; 
    output.setWrapStyleWord(true) ; 
    pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS) ; 
    output.setEditable(false) ; 
    pane.getVerticalScrollBar().setValue(100); //scrollbar always at bottom 
    input.requestFocus() ; 

    /*Edit: Should I call for the input string here, e.g. output.append(inputString) 
    i get the compilation error message: 
    Games.java:29: error: cannot find symbol 
    output.append(inputString) ; 
       ^
    symbol: variable inputString 
    location: class Games 
    */ 

    add(pnl) ; 
    pnl.add(pane) ; 
    pnl.add(input) ; 

    input.addActionListener(this) ; 

    setVisible(true) ; 
} 

public void actionPerformed(ActionEvent event) 
{ 
    inputString = input.getText() ; 
    input.setText("") ; 
}   
/*The string i need to analyse is inputString, but I cannot, get it out of this method 
    any help you guys can give me would be greatly appreciated. */ 

public static void main(String[] args) 
{ 
    Games gui = new Games() ; 
} 
} 

********************************** 
    try 
    { 
     a = reader.readLine() ; 
    } 
    catch (IOException e) 
    { 
     System.out.println("An Input Error Has Occured") ; 
    } 
    if (a.indexOf("hide") != -1) switchvariable = 'b' ; 
    if ((a.indexOf("exit") != -1) || (a.indexOf("leave") != -1) || (a.indexOf("out") != -1)) switchvariable = 'a' ; 
    if ((a.indexOf("exit") == -1) && (a.indexOf("hide") == -1) && (a.indexOf("leave") == -1) && (a.indexOf("out") == -1)) switchvariable= 'c' ; 
    String outcome = "" ; 
    switch (switchvariable) 
    { 
    case 'a' : outcome = "You exit the tavern to be discovered by\na group of bandits!\n" ; i = -1 ; break ; 
    case 'b' : outcome = "You hide behind the bar for 10 minutes until\nyou can no longer hear the group." ; i = -1 ; break ; 
    case 'c' : outcome = "You must choose between the two given options, exit the tavern, or hide." ; break ; // the variable i will still be greater 
    //than 1 so the loop will continue until you reach an agreeable option, which in this case is either hiding, or addressing the group of people 
    } 
    System.out.println(outcome) ;   

我會非常喜歡做的就是使用文本框對於用戶輸入,所以我需要做的是將文本放在輸出textarea,然後這應該根據用戶輸入更改,我想要使用的代碼示例顯示在下面的asterixes

回答

3

如果我理解正確,當用戶在文本字段中按下Enter時,您想要將在文本字段中輸入的文本附加到輸出文本區域。

按下Enter後,文本字段會觸發一個操作事件。你在班上聽這個活動。所以,在這一刻,你只需要將該值附加到文本區域。

Swing是基於事件的:

public void actionPerformed(ActionEvent event) { 
    String inputString = input.getText() ; 
    output.append(inputString); 
    input.setText(""); 
} 

在構造的代碼在執行時,才執行。因此,獲取文本字段的值當然會返回一個空字符串,因爲在構建時,文本字段甚至不可見。

編輯:做你想做什麼,只是有以下幾點:

public void actionPerformed(ActionEvent event) { 
    String inputString = input.getText() ; 
    printOutcome(inputString); 
    input.setText(""); 
} 

private void printOutcome(String input) { 
    char switchvariable = ' '; 
    if (input.indexOf("hide") != -1) { 
     switchvariable = 'b' ; 
    } 
    if ((input.indexOf("exit") != -1) || (input.indexOf("leave") != -1) || (input.indexOf("out") != -1)) { 
     switchvariable = 'a'; 
    } 
    if ((input.indexOf("exit") == -1) && (input.indexOf("hide") == -1) && (input.indexOf("leave") == -1) && (input.indexOf("out") == -1)) { 
     switchvariable= 'c'; 
    } 
    String outcome = "" ; 
    switch (switchvariable) { 
     case 'a' : 
      outcome = "You exit the tavern to be discovered by\na group of bandits!\n"; 
      break; 
     case 'b' : 
      outcome = "You hide behind the bar for 10 minutes until\nyou can no longer hear the group." ; 
      break ; 
     case 'c' : 
      outcome = "You must choose between the two given options, exit the tavern, or hide."; 
      break; 
    } 
    System.out.println(outcome); 
} 

這種方法太複雜,雖然。使用if子句設置char變量,然後切換此char變量沒有意義。你的if子句也應該清理乾淨。

+0

對不起,我在output.append(inputString)中寫入時可能會誤導你,而你給出的解決方案是正確的,這不是我要找的。我需要能夠將inputString從方法中拉出來以便與indexOf運算符一起使用,如果您知道如何執行此操作,將不勝感激:) – user1913822

+0

這個想法是將用戶的數據存儲在變量中,但在actionPerformed方法中不可能做到這一點,因爲每次用戶按下回車鍵時,方法get中的所有內容都會放入,這顯然不是預期的結果。 – user1913822

+0

從'actionPerformed()'方法內調用'indexOf()'方法,或將inputString作爲參數傳遞給另一個調用'indexOf()'的方法。將輸入字符串存儲在變量中是一個壞主意。如果你不明白,那麼編輯你的問題,並詳細說明你真正想做什麼。 –

相關問題