Java~如何实现GUI用户界面将(Swing组件、事件处理机制、布局管理器、IO输入输出)相结合

JPanel panel;//面板放置按钮

JPanel panelCheck;//面板放置选择框

public StudentFrame() {

this.setSize(420,350);

this.setTitle(“学生记录Deal”);

this.setLayout(null);

init();

//关闭窗口就结束程序

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//大小不可变

this.setResizable(false);

//可见

this.setVisible(true);

}

private void init() {

panelCheck = new JPanel();

panelCheck.setSize(310,30);

panelCheck.setLocation(70, 10);

panelCheck.setLayout(new GridLayout(1,4,10,0));

//panel.setBackground(Color.red);

String[] checkNames = new String[] {“添加”, “删除”, “查询”};

checkBoxs = new JCheckBox[3];

for (int i = 0; i < checkBoxs.length; i++) {

checkBoxs[i] = new JCheckBox(checkNames[i]);

checkBoxs[i].addActionListener(this);

panelCheck.add(checkBoxs[i]);

}

this.add(panelCheck);

numLabel=new JLabel(“学号”);

numLabel.setSize(60, 30);//设置控件的大小

numLabel.setLocation(80, 50);//设置控件的左上角坐标

this.add(numLabel);

numText=new JTextField();

numText.setSize(170, 30);

numText.setLocation(140,50);//设置控件的左上角坐标

numText.setEnabled(false);

this.add(numText);

nameLabel=new JLabel(“姓名”);

nameLabel.setSize(60, 30);//设置控件的大小

nameLabel.setLocation(80, 100);//设置控件的左上角坐标

this.add(nameLabel);

nameText=new JTextField();

nameText.setSize(170, 30);

nameText.setLocation(140,100);//设置控件的左上角坐标

nameText.setEnabled(false);

this.add(nameText);

sexLabel=new JLabel(“性别”);

sexLabel.setSize(60, 30);//设置控件的大小

sexLabel.setLocation(80, 150);//设置控件的左上角坐标

this.add(sexLabel);

sexCom=new JComboBox();

sexCom.addItem(“”);

sexCom.addItem(“男”);

sexCom.addItem(“女”);

sexCom.setSize(170, 30);

sexCom.setLocation(140,150);//设置控件的左上角坐标

sexCom.setEnabled(false);

this.add(sexCom);

panel = new JPanel();

panel.setSize(310,30);

panel.setLocation(50, 220);

panel.setLayout(new GridLayout(1,4,10,0));

//panel.setBackground(Color.red);

String[] buttonsNames = new String[] {“添加”, “删除”, “查询”, “清空”};

buttons = new JButton[4];

for (int i = 0; i < buttons.length; i++) {

buttons[i] = new JButton(buttonsNames[i]);

buttons[i].setEnabled(false);

buttons[i].addActionListener(this);

panel.add(buttons[i]);

}

this.add(panel);

}

@Override

public void actionPerformed(ActionEvent e) {

if (e.getSource().getClass().toString().contains(“JCheckBox”)) {

JCheckBox check = (JCheckBox) e.getSource();

if(check.getText().equals(“添加”)) {

checkBoxs[1].setSelected(false);

checkBoxs[2].setSelected(false);

numText.setEnabled(true);

nameText.setEnabled(true);

sexCom.setEnabled(true);

buttons[0].setEnabled(true);

buttons[1].setEnabled(false);

buttons[2].setEnabled(false);

buttons[3].setEnabled(true);

return;

}

if(check.getText().equals(“删除”)) {

checkBoxs[0].setSelected(false);

checkBoxs[2].setSelected(false);

numText.setEnabled(true);

nameText.setEnabled(false);

sexCom.setEnabled(false);

buttons[0].setEnabled(false);

buttons[1].setEnabled(true);

buttons[2].setEnabled(false);

buttons[3].setEnabled(true);

return;

}

if(check.getText().equals(“查询”)) {

checkBoxs[0].setSelected(false);

checkBoxs[1].setSelected(false);

numText.setEnabled(true);

nameText.setEnabled(false);

sexCom.setEnabled(false);

buttons[0].setEnabled(false);

buttons[1].setEnabled(false);

buttons[2].setEnabled(true);

buttons[3].setEnabled(true);

return;

}

}

if(e.getSource().getClass().toString().contains(“JButton”)) {

JButton bt = (JButton) e.getSource();

if(bt.getText().equals(“添加”)) {

if(numText.getText().equals(“”) || nameText.getText().equals(“”)

|| sexCom.getSelectedIndex() == 0) {

JOptionPane.showMessageDialog(this,“信息不完整添加失败”);

return;

}

StudentDeal deal = new StudentDeal();

Student student = new Student(numText.getText().trim(), nameText.getText().trim()

, sexCom.getSelectedItem().toString());

deal.addNewStudent(student);

JOptionPane.showMessageDialog(this,“添加成功”);

return;

}

if(bt.getText().equals(“删除”)) {

if(numText.getText().trim().equals(“”)) {

JOptionPane.showMessageDialog(this,“信息不完整删除失败”);

return;

}

StudentDeal deal = new StudentDeal();

Student student = deal.findStuByNum(numText.getText().trim());

if(student == null) {

JOptionPane.showMessageDialog(this, “无此人”);

return;

}

deal.delStudent(numText.getText().trim());

JOptionPane.showMessageDialog(this, “删除成功”);

return;

}

if(bt.getText().equals(“查询”)) {

if(numText.getText().trim().equals(“”)) {

JOptionPane.showMessageDialog(this,“信息不完整查询失败”);

return;

}

StudentDeal deal = new StudentDeal();

Student student = deal.findStuByNum(numText.getText().trim());

if(student == null) {

JOptionPane.showMessageDialog(this, “无此人”);

return;

}

nameText.setText(student.name);

sexCom.setSelectedItem(student.sex);

return;

}

if(bt.getText().equals(“清空”)) {

numText.setText(“”);

nameText.setText(“”);

sexCom.setSelectedIndex(0);

}

}

}

}

class Student

{

public String num;

public String name;

public String sex;

public Student(String num,String name,String sex)

{

this.num=num;

this.name=name;

this.sex=sex;

}

}

class StudentDeal {

//通过学号来查找学生对象

public Student findStuByNum(String num)

{

Student student=null;

try

{

FileReader fr=new FileReader(“d:\student.txt”);

BufferedReader br=new BufferedReader(fr);

//以文件字符输入流对象为参数来创建一个缓冲的字符输入流对象

String temp=br.readLine();//先从文件中读取第一行数据

while(temp!=null)

{

String[] infos=temp.split(“,”);

//使用切割行数将读取到的一行数据分割成一个字符串数组

if(infos[0].equals(num))//判断第一个元素是否等于所给的学号参数

{

student=new Student(infos[0],infos[1],infos[2]);

//通过切割得到的数组元素来实例化一个学生对象

break;

}

temp=br.readLine();//再次读取一行数据

}

br.close();

fr.close();

}

catch (FileNotFoundException e)

{

e.printStackTrace();

}

catch (IOException e)

{

e.printStackTrace();

}

return student;

}

}

//往学生记录文件中插入一条学生记录

public void addNewStudent(Student stu)

{

if(stu!=null)//首先判断插入对象不为空

{

if(!checkNumIsExist(stu.num))//判断学号是否已经存在

{

try

{

FileWriter fw=new FileWriter(“d:\student.txt”,true);

//表示在写文件的时候是追加而不是覆盖

BufferedWriter bw=new BufferedWriter(fw);

//通过文件字符输出流对象来创建缓冲的字符输出流对象

StringBuffer str=new StringBuffer();

str.append(stu.num+“,”);

str.append(stu.name+“,”);

str.append(stu.sex);

bw.newLine();//写入之前先换行

bw.write(str.toString());

bw.close();

fw.close();

}

catch (FileNotFoundException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

}

//通过所给的学号来删除学生记录

public void delStudent(String num)

{

ArrayList students=getAllStudents();

//将文件中的所有的学生记录读取到容器对象中

for(Student temp:students)//用foreach循环来遍历查找所有的学生对象

{

if(temp.num.equals(num))//判断某一个学生对象的学号是否和所给的参数学号是相等的

{

students.remove(temp);//将对应的学生对象移除出容器

break;//退出循环,因为学号是唯一的

}

}

///以下操作为将容器对象中的学生记录覆盖式写入到学生记录文件中

try

{

FileWriter fw=new FileWriter(“d:\student.txt”);

//创建文件字符输出流的时候,应该采用的是覆盖式的写入

BufferedWriter bw=new BufferedWriter(fw);

//创建一个缓冲的字符输出流对象

for(Student temp:students)//用foreach循环来遍历查找所有的学生对象

{

//将某个学生对象转换为标准的字符串

StringBuffer str=new StringBuffer();

str.append(temp.num+“,”);

str.append(temp.name+“,”);

str.append(temp.sex);

//将转换完的字符串写入到学生记录文件
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性

Java面试宝典2021版

最常见Java面试题解析(2021最新版)

2021企业Java面试题精选

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
src=“https://img-blog.csdnimg.cn/img_convert/d11741c254a47087c626d2545a18f79d.jpeg” alt=“img” style=“zoom: 33%;” />

最后

光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性

Java面试宝典2021版

[外链图片转存中…(img-wkRY8oDX-1712043538059)]

[外链图片转存中…(img-Gtuz60Ll-1712043538060)]

最常见Java面试题解析(2021最新版)

[外链图片转存中…(img-uUEnR08g-1712043538060)]

[外链图片转存中…(img-bGPfKlxn-1712043538060)]

2021企业Java面试题精选

[外链图片转存中…(img-QzZHCjS9-1712043538061)]

[外链图片转存中…(img-s2JgvAb6-1712043538061)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值