繁体   English   中英

在JTextArea的arraylist中显示元素

[英]Display elements in an arraylist in a JTextArea

我正在创建一个文字游戏,玩家必须使用给定单词中的字母制作尽可能多的单词。 (示例:给定的单词是“大象”,因此可能的答案是喘气和帮助)。 我想在文本框中显示正确的答案。 现在,唯一显示的是空白文本区域。

这是将单词放入各自数组列表的代码:

public void checkAnswers() { 
    ArrayList<String> validAnswers = new ArrayList<String>();
    ArrayList<String> wrongAnswers = new ArrayList<String>();
    ArrayList<String> notFound = new ArrayList<String>();
    List<String> compare = new ArrayList<String>();

    if (r == 0){
    compare = arr1Sub;
    }
    else if (r == 1){
            compare = arr2Sub;
    }
    else if(r == 2){
            compare = arr3Sub;
    }
    else{
            compare.add("error");
            System.out.println(compare);
    }
    for (int i = 0; i < inputList.size(); i++){
        if (compare.contains(inputList.get(i))){ 
                validAnswers.add(inputList.get(i));
        }
        else if (!compare.contains(inputList.get(i))){
                wrongAnswers.add(inputList.get(i));
        }
        else{
                notFound.add(compare.get(i)); 
        }

    for(String s : validAnswers){
        txtvalidWords.append(s.toString()); 
    }  

这是GUI的代码:

public void CheckAnswersGUI(){
    JPanel answersPanel = new JPanel(); 
    JPanel wrongPanel = new JPanel(); 
    JPanel possiblePanel = new JPanel(); 
    container = new JPanel(); 

    lblvalid = new JLabel("Valid Answers"); 
    txtvalidWords = new JTextArea("",30,30); 
    lblwrong = new JLabel("Wrong Answers"); 
    txtwrongWords = new JTextArea("",30,30); 
    lblpossible = new JLabel("Answers Not Found"); 
    txtpossibleWords = new JTextArea("",30,30); 

    btnPlayAgain = new JButton("Play Again"); 
    btnPlayAgain.addActionListener(this);  

    FlowLayout checkLayout = new FlowLayout(); 
    answersPanel.setLayout(checkLayout); 
    wrongPanel.setLayout(checkLayout); 
    possiblePanel.setLayout(checkLayout);

    container.setLayout(new BoxLayout(container,BoxLayout.X_AXIS)); 
    container.add(answersPanel); 
    container.add(wrongPanel); 
    container.add(possiblePanel);  
    container.add(btnPlayAgain);   

    inputList = new ArrayList<String>();
    String text = inputWords.getText(); 
    String[] words = text.split("\\s"); 

    for (String word : words){
        inputList.add(word); 
    }

    answersPanel.add(lblvalid);  
    answersPanel.add(txtvalidWords); 
    wrongPanel.add(lblwrong); 
    wrongPanel.add(txtwrongWords); 
    possiblePanel.add(lblpossible); 
    possiblePanel.add(txtpossibleWords); 
    getContentPane().add(container); 

    setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo (null);
    setSize (700,500);
    setTitle ("Check Your Answers");
    setVisible(true);
}   

    }

发生的事情是,我认为您正在尝试在没有文本的情况下从文本区域获取输入。 您的构造函数中有这个

String text = inputWords.getText(); 

没有初始文本,因此将无济于事。

我假设在您的actionPerformed ,您将其checkAnswers ,因此我将提供此建议。 从构造函数中获取该代码,并将其放入actionPerformed()

public void actionPerformed(ActionEvent e){
    inputList = new ArrayList<String>();
    String text = inputWords.getText(); 
    String[] words = text.split("\\s"); 

    for (String word : words){
         inputList.add(word);
    }

    // then call the check answers. 
    checkAnswers();
}

当您在构造函数中拥有它时,会在程序首次启动时发生操作,它将尝试读取一个空白文本区域。 现在,当您将其放入actionPerformed中时,直到按下按钮,它才会尝试读取它。

编辑:答案来自不同的类(如OP注释中所述)

比方说,你有这个类Answers

public class Answers {
    private ArrayList<String> answers;

    public ArrayList<String> getAnswers(){
        return answers;
    }
}

在您的checkAnswers() ,应该在方法内部创建该类的实例,以便可以引用这些答案。

public void checkAnswer(){
    Answers ans = new Answers();

    ArrayList<String> answers = ans.getAnswer();
}

现在,您可以使用其他班级的答案进行比较。

编辑2:

public class PlayGame {
    private ArrayList<String> validAnswers = new ArrayList<String>();
    private ArrayList<String> wrongAnswers = new ArrayList<String>();
    private ArrayList<String> notFound = new ArrayList<String>();

    public ArrayList<String> getValidAnswers(){
        return validAnswers;
    }

    public ArrayList<String> getWrongAnswers(){
        return wringAnswers;
    }

    public ArrayList<String> getNotFound(){
        return notFound;
    }

    public void checkAnswers(String text) {
        // get text from texArea and use that text 
        // I'm guess to populate your compare list
    }
}

public class GUI extends JPanel {
    private JTextArea inputTextArea = new JTextArea();
    JButton checkAnswers = new JButton("Check Answers");

    PlayGame game = new PlayGame();

    public GUI {
        ...

       checkAnswers.addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent e){
               String text = inputTextArea.getText();

               game.checkAnswers(text);

               ArrayList<String> validAnswers = game.getValidAnswers();
               ArrayList<String> wrongAnswers = game.getWrongAnswers();
               ArrayList<String> notFound = game.getNotFound();

               // code to append these lists to their corresponding text areas
           }
       });
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM