[英]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字段的標簽,則需要執行以下操作:
在Driver類中添加一個List字段:
public class Driver { List<String> lines; //other fields that you need }
在gui()方法的第一行中,使用文件中的實際行來初始化lines字段,並使用0初始化i計數器:
public void gui() { lines = readLinesFromFile(); i = 0; //other code
添加以下方法:
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; }
使用以下命令將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.