原标題:Java GUI 實作個人資訊錄入
我們的資訊可以儲存在資料庫也可以儲存在檔案中,我們通過java圖形界面的形式錄入資料,然後儲存在檔案中。
package com.xfonlineclass;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;
public class AddressList extends JFrame implements ActionListener {
private static final long serialVersionUID = 1533432567332718336L;
private JTextField phonetextField; // 建立文本框元件
private JTextField emailtextField;
private JTextField nametextField;
final JPanel panel = new JPanel(); // 建立面闆元件
JMenu fileMenu; // 定義菜單對象
JMenuItem reveal;
JMenuItem kinescope;
JPanel jPanel = new JPanel();
File file = new File("D://addressList.txt"); // 建立檔案對象
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
AddressList frame = new AddressList(); // 建立本類對象
frame.setVisible(true); // 設定窗體可視狀态
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public AddressList() { // 構造方法中實作窗體布局
super();
setTitle("個人通訊錄"); // 設定窗體标題
getContentPane().setLayout(null); // 設定窗體布局
setBounds(100, 100, 382, 237);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar bar = new JMenuBar();
fileMenu = new JMenu("檔案");
reveal = new JMenuItem("顯示");
kinescope = new JMenuItem("錄入");
reveal.addActionListener(this);
kinescope.addActionListener(this);
this.setJMenuBar(bar);
bar.add(fileMenu);
fileMenu.add(reveal);
fileMenu.add(kinescope);
panel.setLayout(null);
panel.setBounds(0, 0, 374, 178);
getContentPane().add(panel);
final JLabel namelabel = new JLabel();
namelabel.setBounds(77, 29, 66, 18);
namelabel.setText("輸入姓名:");
panel.add(namelabel);
nametextField = new JTextField();
nametextField.setBounds(149, 27, 122, 22);
panel.add(nametextField);
final JLabel emaillabel = new JLabel();
emaillabel.setBounds(77, 66, 66, 18);
emaillabel.setText("輸入Email:");
panel.add(emaillabel);
emailtextField = new JTextField();
emailtextField.setBounds(149, 64, 122, 22);
panel.add(emailtextField);
final JLabel phonelabel = new JLabel();
phonelabel.setText("輸入電話:");
phonelabel.setBounds(77, 103, 66, 18);
panel.add(phonelabel);
phonetextField = new JTextField();
phonetextField.setBounds(149, 101, 122, 22);
panel.add(phonetextField);
final JLabel label = new JLabel();
label.setText("單擊錄入:");
label.setBounds(77, 137, 66, 18);
panel.add(label);
final JButton kinbutton = new JButton();
kinbutton.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
kinbuttonActionPerformed(e);
}
});
kinbutton.setText("錄入");
kinbutton.setBounds(149, 132, 122, 28);
panel.add(kinbutton);
}
private void kinbuttonActionPerformed(java.awt.event.ActionEvent evt) {
try {
if (nametextField.getText().equals("") || (emailtextField.getText().equals("")) || (phonetextField.getText().equals(""))) { // 如果使用者沒有将資訊輸入完整
JOptionPane.showMessageDialog(this, "請輸入完整内容", "資訊提示框", JOptionPane.WARNING_MESSAGE); // 給出提示資訊
return; // 退出程式
}
if (!file.exists()) // 如果檔案不存在
file.createNewFile(); // 建立檔案
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true))); // 建立BufferedWriter對象
out.write("姓名:" + nametextField.getText() + ", "); // 向檔案中寫内容
out.write("郵箱:" + emailtextField.getText() + ", ");
out.write("電話:" + phonetextField.getText());
out.newLine(); // 建立一行
out.close(); // 關閉流
} catch (Exception e1) {
e1.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == reveal) { // 如果使用者單擊的是顯示菜單項
try {
getContentPane().remove(panel);
jPanel.setLayout(null); // 設定窗體布局
jPanel.setBounds(0, 0, 374, 178);
JTextArea jtextarea = new JTextArea(20, 10); // 建立文本域對象
jtextarea.setBounds(0, 0, 374, 178); // 設定文本域顯示位置與大小
getContentPane().add(jPanel); // 窗體中添加面闆
jPanel.add(jtextarea); // 向面闆中添加文本域
BufferedReader in = new BufferedReader(new FileReader(file)); // 建立BufferedReader
// 對象
String name = null;
int number = 1;
while ((name = in.readLine()) != null) { // 循環從檔案中讀資料
jtextarea.append("\n" + number + "、 " + name); // 将讀取資料顯示在文本域中
name = new String(name);
number++;
}
in.close();
repaint();
} catch (Exception e1) {
e1.printStackTrace();
}
}
if (e.getSource() == kinescope) { // 如果使用者單擊錄入菜單項
getContentPane().remove(jPanel); // 将面闆移除窗體
getContentPane().add(panel);
repaint(); // 窗體重繪
}
}
責任編輯: