按下按钮时读取一条线

时间:2014-04-09 19:02:09

标签: java swing file-io jbutton bufferedreader

我必须做一个将从文本文件中读取问题的测验类,我不得不试图使程序以每次按下答案按钮的方式工作,它会读取下一个问题(文本中的行)文件),我尝试了很多来自互联网的建议,但我得到的最远的是在程序运行时读取第一行,然后在按下按钮时使用String[] args = new String[0];创建一个新框架然后文本将无法读取一点都不

这是我的代码:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Frame {

    JFrame frame;
    JPanel pan1;
    static JButton boutonRetour,boutonEnregistrer;
    static JTextField reponse,question;
    static int counter1 = 1;
    static int lines=0;


    public static void main(String[] args) {

        final JFrame frame = new JFrame("Frame");

        frame.setSize(700,600);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.setVisible(true);
        question=new JTextField(10);
        question.setBounds(150, 220, 450, 50); 
        question.setEditable(true);
        frame.setContentPane(new JPanel() {
            public void paintComponent(Graphics g) {
                super.paintComponent(g);
                g.drawImage(null, 0, 0, 700, 600, this);
            }
        });

        boutonEnregistrer=new JButton("Answer");
        boutonEnregistrer.setBounds(0,513,100,50);

        boutonEnregistrer.setBackground(new Color(0, 0, 182));
        boutonEnregistrer.setForeground(Color.white);
        boutonEnregistrer.setFocusPainted(false);
        boutonEnregistrer.setFont(new Font("Tahoma", Font.BOLD, 12));

        boutonEnregistrer.addActionListener(new ActionListener(){ 

            public void actionPerformed (ActionEvent e){
                counter1++;  
                String[] args = new String[0];              

                main(args); 
                /*
                SwingUtilities.updateComponentTreeUI(frame);
                frame.revalidate();
                frame.repaint();
                frame.removeAll();
                frame.invalidate();
                frame.validate();
                */   
            } 
        });


        frame.add(question);        
        frame.add(boutonEnregistrer);
        frame.setLayout(null);
        System.out.println(counter1);


        try {        
            BufferedReader br =
            new BufferedReader(new FileReader("Questions.txt"));
            String word = null;
            while((word =br.readLine()) != null) {
                lines++;
            if (lines == counter1){
                question.setText(word);
                break;

}

            }

        } catch(IOException err) {

        }                          
        frame.validate();
        System.out.println(lines);

    };
}

1 个答案:

答案 0 :(得分:0)

您使用lines变量来跟踪已读取的最后一行。但是,您的代码中没有发生这种情况。 while循环始终运行,直到读者达到EOF。

读完所需的一行后,你应该从循环中断:

if (lines == counter1){
    question.setText(word);
    break;
}