一大清早,辅导员让我查一下群里没收到回复的,于是乎用JFrame写了这个软件,惊讶全班同学
Posted 蛋挞太好吃了叭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一大清早,辅导员让我查一下群里没收到回复的,于是乎用JFrame写了这个软件,惊讶全班同学相关的知识,希望对你有一定的参考价值。
今天周六,起床打开Timi,辅导员就发来消息
妈呀,我的天!
虽是小工程,但想到要看着两个白花花的名单一个个找…我的两只眼睛就先痛为敬了。
哎?刚学了Java IO,我想能不能实现用程序帮我找出来呢?
这样的琐事以后肯定还有很多,废话不多说,说干就干!!
于是乎,我答应了。
大脑飞速旋转,打开idea写了这个查找没有收到回复的小demo,大致如下:
把信息都放到对应好的路径后运行:
查找成功!!!
我赶忙告诉中队,跟他炫耀一波我的小机灵!
谁想到他却让我发给他??
正当我刚要把代码copy给他的时候,仔细一想,不对,不可以!
在这个提倡知识付费的时代,代码不可以随便给啊
这不就便宜他了?
于是乎,我想到了JFrame
(正文)
首先,创建一个主类,继承JFrame
public class myApp extends JFrame {
}
在里面写上它的构造方法(这是我们的主阵地)
public myApp(){
}
获得一个JFrame窗体
JFrame c = new JFrame("Get the guys out !");
设置窗体流布局
c.setLayout(new FlowLayout(FlowLayout.LEFT));
设置窗体打开位置(前2个参数),窗体宽高(后2个参数)
c.setBounds(100, 100, 260, 200);// 下图描述各个参数的含义
添加2个提示标签(如上图)
JLabel bq1 = new JLabel("班级名单路径 (例如:d:/名单.txt)");
JLabel bq2 = new JLabel("待查文本粘贴处");
添加3个文本域JTextField(参数为框框长度)
JTextField text1 = new JTextField(20);
JTextField text2 = new JTextField(20);
JTextField text3 = new JTextField(20);
添加按钮,并为其添加监听事件(即按钮按下时,触发函数)
JButton button = new JButton("Get");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
searchAbsentPerson(text1, text2, text3);
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
});
按顺序添加所有的组件到窗口中
c.add(bq1);
c.add(text1);
c.add(bq2);
c.add(text2);
c.add(button);
c.add(text3);
设置窗体可见
c.setVisible(true);
设置默认关闭方式(不设置可以关闭窗口,但进程不会关闭)
c.setDefaultCloseOperation(EXIT_ON_CLOSE);
然后按照一开始的demo完成searchAbsentPerson函数
public static void searchAbsentPerson(JTextField text1, JTextField text2, JTextField text3) throws IOException {
// 以缓存流的方式打开完整名单
File file = new File(text1.getText());
Reader input = new FileReader(file);
BufferedReader in = new BufferedReader(input);
StringBuilder ans = new StringBuilder("");
String name = new String();
// 按完整名单的顺序读取名字,并依次在待查文本中查找
while ((name = in.readLine()) != null){
// 用indexOf查找,返回值为-1,即此人缺席(没有收到回复)
if (text2.getText().indexOf(name) == -1) {
ans.append(name + " ");
}
}
// 在第三个文本域中打印查找结果
text3.setText(ans.toString());
}
最后我们写上启动类
public static void main(String[] args) {
new myApp();
}
大功告成!!看看效果!!
其实第一次Get的时候我乱码了,把txt名单的编码格式改成了ANSI就可以了
接下来就是打包的事情了 (完整代码在文末,求好兄弟的一个三连!!)
于是乎,我把它打包成 Jar 发给了辅导员
我用的是IDEA2020.3的版本,首先在File里找到Project Structure
在Artifacts里,点左上角的 + 号
JAR -> From modules with dependencies…,然后选择主类(myApp)
然后,我们可以把名字改成我们喜欢的名字,导出路径也可以修改
回到主界面,点导航栏的Build,再点里面的Build Artifacts
弹出框框,选择Build即可
然后在设置好的路径找到jar,双击就可以运行啦!
大摇大摆发给了辅导员
同学知道后
文末(完整源码)
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
public class myApp extends JFrame {
public static void searchAbsentPerson(JTextField text1, JTextField text2, JTextField text3) throws IOException {
// 以缓存流的方式打开完整名单
File file = new File(text1.getText());
Reader input = new FileReader(file);
BufferedReader in = new BufferedReader(input);
StringBuilder ans = new StringBuilder("");
String name = new String();
// 按完整名单的顺序读取名字,并依次在待查文本中查找
while ((name = in.readLine()) != null){
// 用indexOf查找,返回值为-1,即此人缺席(没有收到回复)
if (text2.getText().indexOf(name) == -1) {
ans.append(name + " ");
}
}
// 在第三个文本域中打印查找结果
text3.setText(ans.toString());
}
public myApp(){
JFrame c = new JFrame("Get the guys out !");
c.setLayout(new FlowLayout(FlowLayout.LEFT));
c.setBounds(100, 100, 260, 200);
JLabel bq1 = new JLabel("班级名单路径 (例如:d:/名单.txt)");
JLabel bq2 = new JLabel("待查文本粘贴处");
JTextField text1 = new JTextField(20);
JTextField text2 = new JTextField(20);
JTextField text3 = new JTextField(20);
JButton button = new JButton("Get");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
searchAbsentPerson(text1, text2, text3);
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
});
c.add(bq1);
c.add(text1);
c.add(bq2);
c.add(text2);
c.add(button);
c.add(text3);
c.setVisible(true);
c.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new myApp();
}
}
END
以上是关于一大清早,辅导员让我查一下群里没收到回复的,于是乎用JFrame写了这个软件,惊讶全班同学的主要内容,如果未能解决你的问题,请参考以下文章