在actionPerformed方法中读取文件,从JTextArea获取答案,找到正确的世界/答案

时间:2015-01-17 19:01:30

标签: java

我问过类似的问题,但它并没有真正解决我遇到的问题。

问题:

  1. 如何在JTextArea中获取要调用actionPerformed方法的文本,以便它可以浏览文件并搜索该特定单词?

  2. 我所拥有的文件没有打开...特别是它直接进入"文件无法打开" "尝试"的一部分声明。我正在使用扫描程序文件来搜索该文件,以查看它们所写的内容是否正确。我该如何解决这个问题?

  3. 该计划的目的是什么:

    我想用这个程序实现的是当使用时按下游戏页面上的一个按钮"在程序中,它将它们带到显示问题的单独页面。现在,该计划的以下部分是问题框架。它显示一个标签,这是有效的。它显示了JTextFile,但不起作用的是它没有获取JTextArea字并搜索我所创建的文件。在他们输入答案并按下按钮后,假设创建一个新的JLabel并显示在math100()方法框架中。

    这是我到目前为止编码的原因:

    public void actionPerformed(ActionEvent event) 
        {
            if(event.getActionCommand().equals("Answer M 100"))
            {
                try
                {
                    String path = "C:\\Users\\Nathan\\Desktop\\answers_file.txt";
                    File answersFile = new File(path);
                    Scanner input = new Scanner(answersFile);
                    System.out.println(answersFile.getAbsolutePath());
                    if(input.hasNext("1,000,000"))
                    {
                        System.out.println("This answer is correct!");
                    }
                    else
                    {
                        System.out.println("This answer is incorrect.");
                    }
                }
                catch(IOException e)
                {
                    System.out.println("File cannot load.");
                    e.printStackTrace();
                }
            }
        }
    
        public static void math100()
        {
            JFrame m100Frame = new JFrame("100 Point Math Question");
            m100Frame.setSize(350,350);
            m100Frame.setLocationRelativeTo(null);
            JPanel pane = new JPanel();
            m100Frame.setContentPane(pane);
    
            JLabel question = new JLabel("<html><p><div WIDTH = 320><center>Round 1,291,293 to the nearest thousands, and round 8.472 to the nearest hundredth.</p><p>Put answers in box below, and have the word 'and' between the two answers.</center></width></div></html>");
    
            JTextArea answerArea = new JTextArea("",10,25);
    
            JButton answerQuestion = new JButton("Answer M 100");
            answerQuestion.addActionListener(new allQuestions());
    
            pane.add(question);
            pane.add(answerArea);
            pane.add(answerQuestion);
    
            m100Frame.setVisible(true);
            m100Frame.toFront();
        }
    

    我查看了程序的这一部分的Stack Trace,而且似乎不起作用的唯一部分是:

    at allQuestions.actionPerformed(allQuestions.java:16)

    感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

&#34; only&#34;部分不工作是你的整个方法。我不明白你为什么试图这样使用它。然而。

试试这个:

public void actionPerformed(ActionEvent e) {
    if (e.getSource().equals(yourButton)) {
        try {
            String path = "C:\\Users\\Nathan\\Desktop\\answers_file.txt";
            File file = new File(path);
            Scanner input = new Scanner(file);
            while (input.hasNext()){
                //datatype you need?! I don't know what your .txt file contains.
                String nextToken = input.next(); //a token is a for example a digit or a word. They will be splitted by a space from each other normally.
                //alternatively you get a line
                //String nextLine = input.nextLine();
                String text = yourTextArea.getText();
                if (text.equals(nextToken)) { //alternatively "nextLine"
                    System.out.println("The answer is correct");
                } else {
                    System.out.println("The answer is right");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

为了澄清这一点:e.getSource().equals(yourButton)比较触发事件的来源是否是您之前推送的按钮。如果是:程序应该读取文件并通过令牌(或逐行)将该令牌与您在TextArea中获得的文本进行比较。