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

学生信息存放在data.txt中格式为学号姓名性别生日奖学金简历初始时显示文件中第一个学生的信息,通过“第一条”、“下一条”、“前一条”和“最后一条”按钮实现查询学生的所... 学生信息存放在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();
}
}

望给与功能实现
顺便可以的话请给读取文件给下解释和注解 谢谢
展开
 我来答
坏坏奶茶
推荐于2016-10-01 · TA获得超过266个赞
知道小有建树答主
回答量:119
采纳率:100%
帮助的人:180万
展开全部
我在你给的代码的基础上进行了你要求的功能的实现:
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<sum){
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<flag;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();
}

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式