在JTextArea中打开和显示文件数据

时间:2017-08-17 19:42:40

标签: java user-interface

我遇到了一个我认为非常简单的程序的问题。我只想使用GUI,单击和按钮在文本文件中显示数据。我似乎很接近,但遇到了一个我不明白的问题。如果我按照它在这里的方式离开代码,我得到的错误是没有为第72行声明highScores(找不到符号)。但是如果我尝试声明highSchores,我得到错误“未报告的异常java.io.IOException;必须被捕或被宣布为“第69行被抛出。任何想法我做错了什么以及如何解决它?

create([_],N,J,K,J):- N>K.
create([X|Xs],N,L,K,J):- X==N , N1 is N + 1 , create(Xs,N1,[-1|L],K,J).
create([X|Xs],N,L,K,J):-N1 is N + 1 , create([X|Xs],N1,[0|L],K,J).

K is the size of the output list.
N is a counter .
L is the output.
X is the input list. 

?- create([1,2],1,[],5,N).
N = [0, 0, 0, 0, -1] 

1 个答案:

答案 0 :(得分:0)

OpenFile()方法抛出IOException,但它永远不会被捕获。

我做了一些修改:

  1. 可以将highScores声明为List(因此您不必提前提供行数)

  2. 发现了异常

  3. 换行符是" \ n",不是" / n"

  4. 可以进行一些修改,但这应该有效:

    import java.awt.Component;
    import java.awt.Container;
    import java.util.List;
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JRadioButton;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    import javax.swing.WindowConstants;
    
    public class TetrisScores extends JFrame {
    
        private JPanel contentPanel;
        private JButton btnSearch;
        private JButton btnLoad;
        private JButton btnSort;
        private JRadioButton firstSort;
        private JRadioButton secondSort;
        private JTextField searchInput;
        private JTextArea output;
    
        private List<String> highScores = new ArrayList<>();
    
        private void add(Container con, Component widget, int left, int top, int width, int height) // creates variables for
                                                                                                    // bounds
        {
            widget.setBounds(left, top, width, height); // sets setBounds to created variables
            con.add(widget); // tells program container to use widget's bounds
        }
    
        TetrisScores() {
            contentPanel = (JPanel) getContentPane();
            contentPanel.setLayout(null);
    
            btnLoad = new JButton("Load File");
            add(contentPanel, btnLoad, 10, 10, 360, 40);
    
            searchInput = new JTextField("");
            add(contentPanel, searchInput, 10, 60, 240, 40);
    
            btnSearch = new JButton("Search");
            add(contentPanel, btnSearch, 260, 60, 110, 40);
    
            firstSort = new JRadioButton("Bubble Sort");
            add(contentPanel, firstSort, 20, 110, 110, 40);
    
            firstSort = new JRadioButton("Linear Sort");
            add(contentPanel, firstSort, 140, 110, 110, 40);
    
            btnSearch = new JButton("Sort");
            add(contentPanel, btnSearch, 260, 110, 110, 40);
    
            output = new JTextArea("");
            add(contentPanel, output, 10, 160, 360, 150);
            output.setEditable(false);
    
            setTitle("High Scores");
            setSize(500, 500);
            setLocation(new Point(150, 150));
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setVisible(true);
    
            btnLoad.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent add) {
                    try {
                        OpenFile();
                        for (int j = 0; j < highScores.size(); j++) {
                            output.append(highScores.get(j) + "\n");
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    
        public void OpenFile() throws IOException {
            FileReader fr = new FileReader("tetrishighscore.txt");
            BufferedReader scoreReader = new BufferedReader(fr);
    
            String line;
            while((line = scoreReader.readLine()) != null) {
                highScores.add(line);
            }
    
            scoreReader.close();
        }
    
        public static void main(String[] args) {
            new TetrisScores();
        }
    }