2017-08-07 79 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."); 
        } 
       } 
      } 
     });