Java 按下按钮时读一行
我必须做一个测验课,从文本文件中读取问题,我一直试图让程序以这样的方式工作,每次按下回答按钮,它都会读取下一个问题(文本文件中的行),我尝试了许多来自互联网的建议,但我得到的最多的建议是在程序运行时阅读第一行,然后使用Java 按下按钮时读一行,java,swing,file-io,jbutton,bufferedreader,Java,Swing,File Io,Jbutton,Bufferedreader,我必须做一个测验课,从文本文件中读取问题,我一直试图让程序以这样的方式工作,每次按下回答按钮,它都会读取下一个问题(文本文件中的行),我尝试了许多来自互联网的建议,但我得到的最多的建议是在程序运行时阅读第一行,然后使用String[]args=newstring[0]在按下按钮时有一个新的帧,但是文本根本无法读取 这是我的密码: import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.a
String[]args=newstring[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;
}
您可以使用
lines
变量来跟踪最后一行的读取。然而,这并没有发生在您的代码中。while循环始终运行,直到读卡器达到EOF
阅读所需行后,应断开循环:
if (lines == counter1){
question.setText(word);
break;
}
你说这篇文章根本不读是什么意思?此外,您还应该在catch块中打印堆栈跟踪(err.printStackTrace()),以便至少知道有错误。程序第一次运行时,它会读取第一行并在jtext字段中显示,但是当我按下按钮时,一个新的帧打开了,但是文本字段上没有显示任何文本…我添加了err.printStackTrace(),但是没有错误,只是没有按照我需要的方式来关闭你的BufferedReaders。在finally块中调用
br.close()
。出现问题的原因可能是BufferedReader的第二个实例可能正在等待第一个流关闭。您使用什么来编译程序?代码中存在语法错误(不匹配的*/
)。可能是类文件没有更新吗?我用br.close()添加了一个finally块;在它上面我有一个找不到的符号,我也试着把它放在while循环之后,但它没有改变任何东西…我在我的程序上使用netbeans匹配的/*正好在SwingUtilities.updateComponentTreeUI(frame)之前;行,一定是在编辑帖子时删除的谢谢!!现在jtextfield不再是空的…但是它总是显示同一行(第一行),即使计数器和行号为5或20,您编辑问题的代码也不正确。您需要中断代码>语句将位于if块中。目前它不是,在循环的一次迭代后它正在中断。
if (lines == counter1){
question.setText(word);
break;
}