簡體   English   中英

存儲從txt文件到字符串java的行

[英]storing line from txt file to string java

我的程序讀取txt文件,並在單擊Jbutton時在Jlabel中顯示每一行。

當程序運行並單擊Jbutton時,JLabel中沒有任何內容。

我相信這是因為我沒有在readFile方法中正確調用String行。

import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

import javax.swing.*;

public class Driver {

        List<String> lines;

        static String line = "";

        static Scanner scanner = new Scanner(System.in);

        String s = "Welcome Students!";
        String b = "Start!";
        private JFrame f;
        private JPanel p;

        JFrame frame = new JFrame();

        JButton b1 = new JButton(b);

        JLabel jl = new JLabel(s);

        int i;

        private int clicked;

        public Driver() {
                gui();
        }

        public void gui() {
                lines = readLinesFromFile();
                i = 0;
                f = new JFrame("Flash Card Program");
                p = new JPanel();
                f.setLayout(new GridLayout(2, 1));
                f.add(jl);
                f.add(p);
                p.setLayout(new GridLayout(2, 1));
                p.add(b1);

                jl.setHorizontalAlignment(JLabel.CENTER);

                // pack the frame for better cross platform support
                f.pack();
                // Make it visible
                f.setVisible(true);
                f.setSize(500, 400); // default size is 0,0
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                b1.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        jl.setText(lines.get(i));
                        i++;
                        if ( i > lines.size() ) {
                            i = 0;
                        }
                        if (b1.getText().equals("Click For Answer")) {
                            b1.setText("Next Question");
                        } else {
                            b1.setText("Click For Answer");
                        }
                    }
                });


            b1.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {

                            if (clicked++ == 10) {

                                    Object[] options = { "No, thanks", "Yes, please" };

                                    int response = JOptionPane.showOptionDialog(frame,
                                                    "Would you like more math questions? ",
                                                    "Math Questions", JOptionPane.YES_NO_CANCEL_OPTION,
                                                    JOptionPane.QUESTION_MESSAGE, null, options,
                                                    options[1]);

                                    if (response == 1)
                                            clicked = 1; // reset
                                    else
                                            System.exit(0);
                            }
                    }
            }); 
    }


        public static List<String> readLinesFromFile() {
             List<String> lines = new ArrayList<String>();
            try {
                scanner = new Scanner(new File("upload.txt"));
                if (scanner.hasNext()){
                    lines.add(scanner.nextLine());
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            return lines;
        }

        private static void readFile(File file) throws FileNotFoundException{
            Scanner scanner = new Scanner(file);
            while (scanner.hasNextLine()) {
            line = scanner.nextLine();
            }
            scanner.close();
        }


        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        new Driver();
                        readFile(new File("upload.txt"));
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
}

如果要使用文本文件中的任一行設置jl字段的標簽,則需要執行以下操作:

  1. 在Driver類中添加一個List字段:

     public class Driver { List<String> lines; //other fields that you need } 
  2. gui()方法的第一行中,使用文件中的實際行來初始化lines字段,並使用0初始化i計數器:

     public void gui() { lines = readLinesFromFile(); i = 0; //other code 
  3. 添加以下方法:

     public static List<String> readLinesFromFile() { List<String> lines = new ArrayList<String>(); try { Scanner scanner = new Scanner(new File("upload.txt")); if (scanner.hasNext()){ lines.add(scanner.nextLine()); } } catch (FileNotFoundException e) { e.printStackTrace(); } return lines; } 
  4. 使用以下命令將b1的第一個ActionListener更改為:

      b1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jl.setText(lines.get(i)); i++; if ( i > lines.size() ) { i = 0; } if (b1.getText().equals("Click For Answer")) { b1.setText("Next Question"); } else { b1.setText("Click For Answer"); } } }); 

同樣,使用此實現,您不再需要line變量,因為您將標簽的文本設置為lines字段中的值之一。

注意:如果高於文件中的實際行數,則將其重置為0。如果您不希望這樣做,只需更改ActionListener中的if塊即可檢查大小

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM