2017-08-07 71 views
0

我想知道最好的方法來處理我試圖實現的目標,但我無法弄清楚我應該採取的邏輯路徑。EventListener通過案例執行

我有一個JTextField和一個JTextButton,當輸入被添加到JTextField並輸入或按下按鈕時,它將顯示在JTextArea上。現在,我想要的是選擇什麼時候JTextArea和Button做什麼。

例如我想要默認輸入&按鈕在我的代碼中顯示下一個附加文本。然後,當呈現案例時,我希望JTextField只接受int或字符串,然後一旦完成,我希望它恢復爲默認值。

我不知道什麼,我試圖做的是邏輯或最佳實踐...

這背後的想法是,我有一個故事文本基於GUI的遊戲。我希望它向JTextArea顯示文本,並且當按下Enter或按鈕來顯示下一行文本,並且在故事中需要用戶輸入時,JTextArea將查找該輸入。

到目前爲止,我有一個EventListener和ActionListener,它們將我從JTextField類型輸入到JTextArea中,但這就是它。

+0

您可以製作一個函數來驗證您的文本字段的輸入。創建一個名爲UseCase的類或Enum,包含你的星座,並根據需要切換它。我明白你想要做什麼,這絕對不是最糟糕的做法。我也會建議JFormattedTextField,但除了我在互聯網上閱讀的壞東西之外,我沒有任何經驗。 – Wep0n

+0

https://pastebin.com/7ZWsMAVw < - 也許這有助於 – Wep0n

+0

感謝您的回覆,我還是Java新手(約六個月)。我把這個遊戲作爲我的第一個項目,只使用控制檯並完成它,並決定我想把我的學習帶到下一個層次,並使其成爲GUI。 你能給我提供一個例子,或者如果你有任何鏈接指導我你說什麼?我明白你的意思,但我的知識不足以產生你所說的話。 –

回答

0

感謝您的協助!我已經解決了我的問題,不確定這是否是「最佳解決方案」。我將你的解決方案與一些調整結合起來。

在這個實例中,buttonState是一個int值,可以通過調用構造函數「setButtonState」在我的代碼中進行更改。我可以讓buttonState變成靜態的,以便讓事情變得簡單,但我認爲我可以保持乾淨。

enterButton.addActionListener(new ActionListener() 
     { //This is used so when the enter screen button is pressed, it will submit text from text field to text area. 

      public void actionPerformed(ActionEvent e) { 
       String text = inputTextField.getText(); 
       InputTextFieldEvent event = new InputTextFieldEvent(this, text); 

       if (buttonState == 0) //Displays all text in JTextField to JTextArea, mostly for testing purposes. 
       { 
        if (textInputListener != null) { 
         textInputListener.setInputListenerOccurred(event); 
        } 
       } 
       if (buttonState == 1) //Only accepts string for answer 
       { 
        if (inputTextField.getText().matches("[a-zA-Z]+")) 
        { 
         textInputListener.setInputListenerOccurred(event); 
        } 
        else 
        { 
         getAppendMainTextArea("You have entered an invalid input, only letters are allowed."); 
        } 
       } 
       if (buttonState == 2) //Only accepts int for answer 
       { 
        if (inputTextField.getText().matches("[0-9]+")) 
        { 
         textInputListener.setInputListenerOccurred(event); 
        } 
        else 
        { 
         getAppendMainTextArea("You have entered an invalid input, only numbers are allowed."); 
        } 
       } 
      } 
     });