中易网

java 图形界面编程 读取文件操作问题

答案:1  悬赏:80  
解决时间 2021-12-30 20:48
学生信息存放在data.txt中
格式为
学号 姓名 性别 生日 奖学金 简历

初始时显示文件中第一个学生的信息,通过“第一条”、“下一条”、“前一条”和“最后一条”按钮实现查询学生的所有数据。

图形界面已经编好

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
class guiView extends JFrame
{ JButton shoutiao;
JButton motiao;
JButton xiatiao;
JButton shangtiao;
JLabel xuehao;
JLabel xingming;
JLabel xingbie;
JLabel shengri;
JLabel jiangxuejin;
JLabel jianli;
JTextField JT1;
JTextField JT2;
JTextField JT3;
JTextField JT4;
JTextField JT5;
JTextField JT6;

JFrame f;

public void init() {
f = new JFrame("学生信息浏览窗口");
JPanel j1 = new JPanel();
JPanel j2 = new JPanel();
JPanel j3 = new JPanel();
JPanel j4 = new JPanel();
JPanel j5 = new JPanel();
JPanel j6 = new JPanel();
JPanel j7 = new JPanel();
JPanel j8 = new JPanel();
JPanel j9 = new JPanel();
JPanel j10 = new JPanel();

FlowLayout flow = new FlowLayout();
j1.setLayout(flow);
j2.setLayout(flow);
j3.setLayout(flow);
j4.setLayout(flow);
j5.setLayout(flow);
j6.setLayout(flow);
j7.setLayout(flow);
j10.setLayout(flow);
f.getContentPane().setLayout(new BorderLayout());
j8.setLayout(new BorderLayout());
j9.setLayout(new BorderLayout());
shoutiao=new JButton("首条");
motiao=new JButton("末条");
xiatiao=new JButton("下条");
shangtiao=new JButton("上条");
xuehao= new JLabel("学号 :");
xingming= new JLabel("姓名 :");
xingbie= new JLabel("性别 :");
shengri= new JLabel("生日 :");
jiangxuejin= new JLabel("奖学金:");
jianli= new JLabel("简历 :");
JT1 = new JTextField(12);
JT2 = new JTextField(12);
JT3 = new JTextField(12);
JT4 = new JTextField(12);
JT5 = new JTextField(12);
JT6 = new JTextField(12);

j1.add(xuehao);
j1.add(JT1);
j2.add(xingming);
j2.add(JT2);
j3.add(xingbie);
j3.add(JT3);
j4.add(shengri);
j4.add(JT4);
j5.add(jiangxuejin);
j5.add(JT5);
j6.add(jianli);
j6.add(JT6);
j7.add(shoutiao);
j7.add(shangtiao);
j7.add(xiatiao);
j7.add(motiao);
j8.add("North", j1);
j8.add("Center", j2);
j8.add("South", j3);
j9.add("North", j4);
j9.add("Center", j5);
j9.add("South", j6);
j10.add(j8);
j10.add(j9);
f.getContentPane().add("Center", j10);
f.getContentPane().add("South", j7);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500, 200);
f.setVisible(true);

}
}
public class P {

public static void main(String[] s){
guiView c =new guiView();
c.init();
}
}

望给与功能实现

顺便可以的话请给读取文件给下解释和注解 谢谢
最佳答案
我在你给的代码的基础上进行了你要求的功能的实现:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;

import javax.swing.*;

class guiView extends JFrame implements ActionListener {
JButton shoutiao;
JButton motiao;
JButton xiatiao;
JButton shangtiao;
JLabel xuehao;
JLabel xingming;
JLabel xingbie;
JLabel shengri;
JLabel jiangxuejin;
JLabel jianli;
JTextField JT1;
JTextField JT2;
JTextField JT3;
JTextField JT4;
JTextField JT5;
JTextField JT6;

JFrame f;

int flag = 1; //用于标记当前行的位置
int sum = 0; //用户统计文件的总行数

public void init() {
f = new JFrame("学生信息浏览窗口");
JPanel j1 = new JPanel();
JPanel j2 = new JPanel();
JPanel j3 = new JPanel();
JPanel j4 = new JPanel();
JPanel j5 = new JPanel();
JPanel j6 = new JPanel();
JPanel j7 = new JPanel();
JPanel j8 = new JPanel();
JPanel j9 = new JPanel();
JPanel j10 = new JPanel();

FlowLayout flow = new FlowLayout();
j1.setLayout(flow);
j2.setLayout(flow);
j3.setLayout(flow);
j4.setLayout(flow);
j5.setLayout(flow);
j6.setLayout(flow);
j7.setLayout(flow);
j10.setLayout(flow);
f.getContentPane().setLayout(new BorderLayout());
j8.setLayout(new BorderLayout());
j9.setLayout(new BorderLayout());

shoutiao = new JButton("首条");
shoutiao.addActionListener(this);//每个按钮都添加事件监听器
shoutiao.setActionCommand("first");
motiao = new JButton("末条");
motiao.addActionListener(this);//每个按钮都添加事件监听器
motiao.setActionCommand("last");
xiatiao = new JButton("下条");
xiatiao.addActionListener(this);//每个按钮都添加事件监听器
xiatiao.setActionCommand("next");
shangtiao = new JButton("上条");
shangtiao.addActionListener(this);//每个按钮都添加事件监听器
shangtiao.setActionCommand("previous");

xuehao = new JLabel("学号 :");
xingming = new JLabel("姓名 :");
xingbie = new JLabel("性别 :");
shengri = new JLabel("生日 :");
jiangxuejin = new JLabel("奖学金:");
jianli = new JLabel("简历 :");
JT1 = new JTextField(12);
JT2 = new JTextField(12);
JT3 = new JTextField(12);
JT4 = new JTextField(12);
JT5 = new JTextField(12);
JT6 = new JTextField(12);

j1.add(xuehao);
j1.add(JT1);
j2.add(xingming);
j2.add(JT2);
j3.add(xingbie);
j3.add(JT3);
j4.add(shengri);
j4.add(JT4);
j5.add(jiangxuejin);
j5.add(JT5);
j6.add(jianli);
j6.add(JT6);
j7.add(shoutiao);
j7.add(shangtiao);
j7.add(xiatiao);
j7.add(motiao);
j8.add("North", j1);
j8.add("Center", j2);
j8.add("South", j3);
j9.add("North", j4);
j9.add("Center", j5);
j9.add("South", j6);
j10.add(j8);
j10.add(j9);
f.getContentPane().add("Center", j10);
f.getContentPane().add("South", j7);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500, 200);
f.setVisible(true);

getData();//初始化显示文件的第一行
}

//对点击首行,上一行,下一行,最后一行按钮触发的操作进行事件响应处理
public void actionPerformed(ActionEvent e) {
String event = e.getActionCommand();
if (event.equals("first")) {
flag = 1;
getData();
} else if (event.equals("last")) {
flag = sum;
getData();
} else if (event.equals("next")) {
if(flag flag++;
};// 考虑读到文件末尾的情况,再选择下一条仍是最后一条
getData();
} else if (event.equals("previous")) {
if (flag > 1) {
flag--;
}// 考虑读到文件第一行的情况,再选择上一条仍是第一条
getData();
} else {
System.err.println("error!");
System.exit(-1);
}
}

//通过flag标记当前读到了文件的第几行。然后循环读至该行
public void getData() {
File file = new File("F:/java/data.txt");
String str=null;
StringTokenizer st;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
for(int i=0;i str = br.readLine();
}
if (str == null) {
System.err.println("no data!");
} else {
st = new StringTokenizer(str);//每行信息的6个字段分别用空格隔开的
this.JT1.setText(st.nextToken());
this.JT2.setText(st.nextToken());
this.JT3.setText(st.nextToken());
this.JT4.setText(st.nextToken());
this.JT5.setText(st.nextToken());
this.JT6.setText(st.nextToken());
}
br.close();//一定要关闭资源
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//统计文件总共有多少行,方便判断是否已到达文件末尾,统计的行数放在sum里面
public void countLines() {
File file = new File("F:/java/data.txt");
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
while (br.readLine() != null) {
sum++;
}
br.close();//一定要关闭资源
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] s) {
guiView c = new guiView();
c.countLines();//统计文件行数
c.init();
}

}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
庸德的意思是什么啊?请解释下!
转益的意思是什么?转益的释义是什么啊?
聊城工程技师学院今年什么时候报名
归途的意思是什么?归途的释义是什么啊?
歌词我绝对爱你在歌名
冰魂雪魄的意思是什么啊?请解释下!
幕后音乐人什么意思
小孩子打鼾是什么原因?
崇事的意思是什么?崇事的释义是什么啊?
为何河南大学经济学院学费这么高?
用人单位在录用合同上统一写成初中文化程度,
亚马逊注册为什么需要自主平台的店铺连接
我爱我的车这个项目怎么样
黜放的意思是什么啊?请解释下!
扺颓的意思是什么?扺颓的释义是什么啊?
推荐资讯
色盲和色弱有什么区别
桃花滩派出所(翊武路)办公地址在什么地方,我
手軸的意思是什么?手軸的释义是什么啊?
乡团的意思是什么啊?请解释下!
想回家了。可是在家又没收入,老是打工吧,小
堰头村老年协会地址在什么地方,想过去办事
沴魃的意思是什么啊?请解释下!
我朋友结婚就跟公婆一起生活,现在生活了二十
丈夫兒的意思是什么?丈夫兒的释义是什么啊?
原头的意思是什么啊?请解释下!
月下独酌中的月亮代表了诗人怎样的品格
手心的线都是什么线,都有什么含义
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?