小程序我的项目下载链接:点击打开链接
因为这学期比赛太多,蓝桥杯,团体程序设计大赛,ACM省赛等原因基本这学期的课程都没上,比赛完后开始去上课,java老师让用java写一个学生信息录入界面,把界面中的信息保存在学生信息.txt文本文档里。。。。最近也没什么事,就看着课本学,结果发现java界面里面的那些textField,JButton。。。。实在太难控制它在JFrame上位置。,突发奇想,基于上学期学了c# ,两者差不多,既然c#可以界面操作,说不定java也有,于是开始发挥百度的强大作用,果然有:
大概意思就是说:windows builder一个java的一个组件,可以在eclipse实现java的界面可视化编程。(一阵狂喜)
跟着网上它的安装和基本使用方法:使用教程链接
接下来我们需要完成两部分:
1.界面
2.功能
有了windows builder 之后界面很快就完成了(如下图:)
果然比在代码控制控件位置简单多啦。。。
接下来最重要的就是功能,我们要实现的是让每一个控件中的内容都要Write入学生信息.txt里面。。
这是书上写的一个字符文件流读写文本文件(实现的功能:将文件a.txt读取到文本区,经修改后,另存为b.txt)
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Win extends JFrame implements ActionListener//接口设置监听器
{
FileReader r_file;//字符文件输入流
FileWriter w_file;//字符文件输出流
BufferedReader buf_reader;//与FileReader类配合使用,将字符输入到缓冲区,使数据处理速度大大加快,提高读写的效率
BufferedWriter buf_writer;
JTextArea txt;
JButton btn1,btn2;
Win()
{
setSize(400,400);
setVisible(true);
txt = new JTextArea(10,10);
btn1 = new JButton("Read");
btn2 = new JButton("Write");
btn1.addActionListener(this);//建立监听器和事件源(按钮)之间的联系
btn2.addActionListener(this);
JPanel p = new JPanel();
add(txt,"Center");
add(p,"South");
p.setLayout(new FlowLayout());//设置窗体为浮动窗体
p.add(btn1);
p.add(btn2);
validate();//使窗体中的组件为可见
setDefaultCloseOperation(EXIT_ON_CLOSE);//设置关闭窗体,退出窗体
}
public void actionPerformed(ActionEvent e)
{
//当单击按钮对象btn时,按钮对象会产生一个ActionEvent事件,事件监听器监听到这个事件,把它作为实现ActionListener接口的actionPerformed方法的参数,在actionPerformed方法中处理动作事件。
if(e.getSource()==btn1)
{
readFile();
}
if(e.getSource()==btn2)
{
writeFile();
}
}
//读取文件
public void readFile()
{
String s;
try
{
File f=new File("C:\\Users\\Administrator\\Desktop\\java小程序\\a.txt");
r_file = new FileReader(f);//将文件f里面的内容给字符文件输入流
buf_reader = new BufferedReader(r_file);
}
catch(IOException ef)
{
System.out.print(ef);
}
try
{
while ((s = buf_reader.readLine())!=null)
{
txt.append(s+'\n');
}
}
catch(IOException er)
{
System.out.print(er);
}
}
public void writeFile()
{
try
{
w_file = new FileWriter("C:\\Users\\Administrator\\Desktop\\java小程序\\b.txt");
buf_writer = new BufferedWriter(w_file);
String str = txt.getText();
buf_writer.write(str,0,str.length());
buf_writer.flush();//一般情况下,writer方法向输出流写数据时,先把数据存放在缓冲区,这时缓冲区的数据不会自动写入输出流,只有当缓冲区满时,才会一次性将缓冲区的数据写入输出流,即写入文件。为了把尚未填满的缓冲区中的数据送出去,这时就要使用flush方法。
}
catch(IOException ew)
{
System.out.print(ew);
}
}
}
public class e81
{
public static void main(String args[])
{
Win w=new Win();
}
}
知道这个之后可以很容易完成TextField控件的写入,下面要解决的就是下拉列表的写入,JComboBox需要在你选中内容后获得他的信息。首先需要给需要设置监听器:
public class H implements ItemListener
{ }
下面是它的选中事件:
public void itemStateChanged(ItemEvent e)
{
sex=e.getItem().toString();
}
下面是整个小程序的代码:
package 学生信息;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class H implements ItemListener{ //JComboBox的监听器
String sex="";//注意要初始化,不然会抛出错误
private JFrame frame;
private JTextField textField;
//FileReader r_file;
FileWriter w_file;
//BufferedReader buf_reader;
BufferedWriter buf_writer;
private JTextField textField_1;
private JTextField textField_2;
private JTextField textField_3;
private JTextField textField_4;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
H window = new H();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public H() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.getContentPane().setFont(new Font("宋体", Font.PLAIN, 22));
frame.setBounds(100, 100, 817, 516);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
JLabel lblNewLabel = new JLabel("\u5B66\u751F\u4FE1\u606F\u5F55\u5165\u754C\u9762");
lblNewLabel.setBounds(239, 15, 334, 67);
lblNewLabel.setFont(new Font("宋体", Font.PLAIN, 30));
frame.getContentPane().add(lblNewLabel);
JLabel label = new JLabel("\u5B66\u53F7\uFF1A");
label.setBounds(29, 107, 81, 21);
label.setFont(new Font("宋体", Font.PLAIN, 24));
frame.getContentPane().add(label);
textField = new JTextField();
textField.setBounds(102, 106, 167, 27);
frame.getContentPane().add(textField);
textField.setColumns(10);
final JButton btnNewButton = new JButton("\u4FDD\u5B58");
btnNewButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) //按钮的点击事件
{
if(e.getSource()== btnNewButton)
{
writeFile();
}
if(e.getSource()== btnNewButton)
{
System.exit(0);
}
}
public void writeFile()
{
try
{
w_file = new FileWriter("C:\\Users\\Administrator\\Desktop\\java小程序\\学生信息.txt");
buf_writer = new BufferedWriter(w_file);
String t=" ";
String number = textField .getText();//读入学号
buf_writer.write(number,0,number.length());
buf_writer.write(t,0,t.length());
String name = textField_1.getText();//读入姓名
buf_writer.write(name,0,name.length());
buf_writer.write(t,0,t.length());
buf_writer.write(sex,0,sex.length());//读入性别
buf_writer.write(t,0,t.length());
String nom = textField_2 .getText();//读入宿舍号
buf_writer.write(nom,0,nom.length());
buf_writer.write(t,0,t.length());
String clas= textField_3 .getText();//读入班级
buf_writer.write(clas,0,clas.length());
buf_writer.write(t,0,t.length());
String cell= textField_4 .getText();//读入班级
buf_writer.write(cell,0,cell.length());
buf_writer.write(t,0,t.length());
buf_writer.flush();
JOptionPane.showMessageDialog(null, "保存成功");
}
catch(IOException ew)
{
System.out.print(ew);
}
}
});
btnNewButton.setBounds(531, 371, 123, 29);
frame.getContentPane().add(btnNewButton);
JLabel lblNewLabel_1 = new JLabel("\u59D3\u540D\uFF1A");
lblNewLabel_1.setFont(new Font("宋体", Font.PLAIN, 24));
lblNewLabel_1.setBounds(29, 163, 81, 21);
frame.getContentPane().add(lblNewLabel_1);
textField_1 = new JTextField();
textField_1.setBounds(102, 162, 167, 27);
frame.getContentPane().add(textField_1);
textField_1.setColumns(10);
JLabel label_1 = new JLabel("\u6027\u522B\uFF1A");
label_1.setFont(new Font("宋体", Font.PLAIN, 24));
label_1.setBounds(29, 225, 81, 21);
frame.getContentPane().add(label_1);
JComboBox comboBox = new JComboBox();
comboBox.setModel(new DefaultComboBoxModel(new String[] {"\u7537", "\u5973"}));
comboBox.setBounds(102, 224, 167, 27);
comboBox.addItemListener(this);
frame.getContentPane().add(comboBox);
JLabel label_2 = new JLabel("\u5BBF\u820D\u53F7\uFF1A");
label_2.setFont(new Font("宋体", Font.PLAIN, 24));
label_2.setBounds(393, 97, 113, 21);
frame.getContentPane().add(label_2);
JLabel label_3 = new JLabel("\u73ED\u7EA7\uFF1A");
label_3.setFont(new Font("宋体", Font.PLAIN, 24));
label_3.setBounds(393, 165, 81, 21);
frame.getContentPane().add(label_3);
JLabel label_4 = new JLabel("\u7535\u8BDD\uFF1A");
label_4.setFont(new Font("宋体", Font.PLAIN, 24));
label_4.setBounds(393, 227, 81, 21);
frame.getContentPane().add(label_4);
textField_2 = new JTextField();
textField_2.setBounds(521, 97, 147, 27);
frame.getContentPane().add(textField_2);
textField_2.setColumns(10);
textField_3 = new JTextField();
textField_3.setBounds(521, 162, 147, 27);
frame.getContentPane().add(textField_3);
textField_3.setColumns(10);
textField_4 = new JTextField();
textField_4.setBounds(521, 224, 147, 27);
frame.getContentPane().add(textField_4);
textField_4.setColumns(10);
JButton button = new JButton("\u53D6\u6D88");
button.setBounds(86, 371, 123, 29);
frame.getContentPane().add(button);
}
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
}
}
完成界面:
保存信息:
总结:我觉得Windows Builder控件对新手做界面操作还是比较方便的,又学到一个新东西。。。
(ps:不知道下面为什么会出现东西,有没有大神有解决方法)