這次的是第二版本:
1.新增了儲存檔案
2.讀取舊檔案
3.洗白目前檔案
4.修改了StreamHelper來協助(I/O)輸出入資料
-----------------------------------------------------------------------------------------------------------------------------
AccountGUIver2:
package IO.AccountProgram;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
public class AccountGUIver2 {
private JFrame frame;
private JPanel panel;
private ArrayList accountList;
private Account account;
private JButton enterbutton;
private JButton displaybutton;
private JButton savebutton;
private JButton deletebutton;
private JTextArea area;
private JTextField datefield;
private JTextField breakfastfield;
private JTextField lunchfield;
private JTextField dinnerfield;
private JTextField othersfield;
private StreamHelperver2 streamhelper;
private JMenu menu;
public void buildGUI () {
frame = new JFrame("啷噹記帳士");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
accountList = new ArrayList();
streamhelper = new StreamHelperver2();
BorderLayout layout = new BorderLayout();
panel = new JPanel(layout);
Box rightbox = new Box(BoxLayout.Y_AXIS);
Box centerbox = new Box(BoxLayout.Y_AXIS);
Box leftbox = new Box(BoxLayout.Y_AXIS);
panel.add(BorderLayout.EAST, rightbox);
panel.add(BorderLayout.CENTER, centerbox);
panel.add(BorderLayout.WEST, leftbox);
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
area = new JTextArea(10, 10);
area.setLineWrap(true);
area.setSelectionColor(Color.blue);
JScrollPane scroller = new JScrollPane(area);
scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
panel.add(BorderLayout.NORTH, scroller);
datefield = new JTextField(10);
breakfastfield = new JTextField(5);
lunchfield = new JTextField(5);
dinnerfield = new JTextField(5);
othersfield = new JTextField(5);
centerbox.add(datefield);
centerbox.add(breakfastfield);
centerbox.add(lunchfield);
centerbox.add(dinnerfield);
centerbox.add(othersfield);
Font font = new Font("LALA", Font.BOLD, 14);
JLabel datelabel = new JLabel("日期(格式為XXXX/XX/XX)");
datelabel.setFont(font);
JLabel breakfastlabel = new JLabel("早餐支出");
breakfastlabel.setFont(font);
JLabel lunchlabel = new JLabel("午餐支出");
lunchlabel.setFont(font);
JLabel dinnerlabel = new JLabel("晚餐支出");
dinnerlabel.setFont(font);
JLabel otherslabel = new JLabel("其他支出");
otherslabel.setFont(font);
leftbox.add(datelabel);
leftbox.add(breakfastlabel);
leftbox.add(lunchlabel);
leftbox.add(dinnerlabel);
leftbox.add(otherslabel);
enterbutton = new JButton("輸入帳目");
savebutton = new JButton("儲存到帳目");
displaybutton = new JButton("列出所有帳目資料");
deletebutton = new JButton("刪除目前帳目資料");
rightbox.add(savebutton);
rightbox.add(displaybutton);
rightbox.add(deletebutton);
centerbox.add(enterbutton);
menu = new JMenu("檔案");
JMenuBar menuBar = new JMenuBar();
JMenuItem saveMenuItem = new JMenuItem("另存帳目新檔");
JMenuItem loadMenuItem = new JMenuItem("讀取帳目檔案");
saveMenuItem.addActionListener(new SaveMenuListener());
loadMenuItem.addActionListener(new LoadMenuListener());
menu.add(saveMenuItem);
menu.add(loadMenuItem);
menuBar.add(menu);
frame.setJMenuBar(menuBar);
savebutton.addActionListener(new SaveListener());
displaybutton.addActionListener(new DisplayListener());
enterbutton.addActionListener(new EnterListener());
deletebutton.addActionListener(new DeleteListener());
frame.setSize(300, 300);
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
public class SaveListener implements ActionListener {
public void actionPerformed (ActionEvent ev) {
if (accountList == null) {
accountList = new ArrayList();
}
if (account == null) {
area.setText("錯誤!! 你沒有輸入帳目");
}
else {
accountList.add(account);
account = null;
}
}
}
public class EnterListener implements ActionListener {
public void actionPerformed (ActionEvent ev) {
String date = datefield.getText();
String breakfast = breakfastfield.getText();
String lunch = lunchfield.getText();
String dinner = dinnerfield.getText();
String others = othersfield.getText();
datefield.setText("");
breakfastfield.setText("");
lunchfield.setText("");
dinnerfield.setText("");
othersfield.setText("");
account = new Account(Integer.parseInt(breakfast), Integer.parseInt(lunch),
Integer.parseInt(dinner), Integer.parseInt(others), date);
}
}
public class DisplayListener implements ActionListener {
public void actionPerformed (ActionEvent ev) {
if (accountList != null) {
area.setText("");
for (int i = 0; i < (accountList.size()); i++) {
area.append(accountList.get(i).printAccount()+"\n");
}
} else {
area.setText("目前帳目沒有任何資料");
}
}
}
public class DeleteListener implements ActionListener {
public void actionPerformed (ActionEvent ev) {
accountList = null;
}
}
public class SaveMenuListener implements ActionListener {
public void actionPerformed (ActionEvent ev) {
JFileChooser filechooser = new JFileChooser();
filechooser.showSaveDialog(frame);
streamhelper.saveFile(accountList, filechooser.getSelectedFile());
}
}
public class LoadMenuListener implements ActionListener {
public void actionPerformed (ActionEvent ev) {
JFileChooser filechooser = new JFileChooser();
filechooser.showOpenDialog(frame);
accountList = streamhelper.loadFile(filechooser.getSelectedFile());
}
}
public static void main(String[] args) {
AccountGUIver2 gui = new AccountGUIver2();
gui.buildGUI();
}
}
-----------------------------------------------------------------------------
ArrayList:
package IO.AccountProgram;
import java.util.*;
import java.io.*;
public class ArrayList implements Serializable {
private Account[] elems;
private int next;
private static final long serialVersionUID = -45560544466L;
public ArrayList(int capacity) {
elems = new Account[capacity];
}
public ArrayList() {
this(50);
}
public void add (Account o) {
if (next == elems.length) {
elems = Arrays.copyOf(elems, elems.length*2);
elems[next++] = o;
}
else {
elems[next++] = o;
}
}
public Account get (int i) {
return elems[i];
}
public Account[] getElems() {
return elems;
}
public int size() {
return next;
}
}
------------------------------------------------------------------------------------------------------------------------
StreamHelperver2:
package IO.AccountProgram;
import java.io.*;
public class StreamHelperver2 {
public void saveFile(ArrayList output, File file) {
try (ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(file))) {
os.writeObject(output);
} catch (IOException ex) {
ex.printStackTrace();
}
}
public ArrayList loadFile(File file) {
ArrayList list = null;
try (ObjectInputStream is = new ObjectInputStream(new FileInputStream(file))) {
list = (ArrayList) is.readObject();
} catch (Exception ex) {
ex.printStackTrace();
}
return list;
}
}
-------------------------------------------------------------------------------------------------------------------------
1.新增了儲存檔案
2.讀取舊檔案
3.洗白目前檔案
4.修改了StreamHelper來協助(I/O)輸出入資料
-----------------------------------------------------------------------------------------------------------------------------
AccountGUIver2:
package IO.AccountProgram;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
public class AccountGUIver2 {
private JFrame frame;
private JPanel panel;
private ArrayList accountList;
private Account account;
private JButton enterbutton;
private JButton displaybutton;
private JButton savebutton;
private JButton deletebutton;
private JTextArea area;
private JTextField datefield;
private JTextField breakfastfield;
private JTextField lunchfield;
private JTextField dinnerfield;
private JTextField othersfield;
private StreamHelperver2 streamhelper;
private JMenu menu;
public void buildGUI () {
frame = new JFrame("啷噹記帳士");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
accountList = new ArrayList();
streamhelper = new StreamHelperver2();
BorderLayout layout = new BorderLayout();
panel = new JPanel(layout);
Box rightbox = new Box(BoxLayout.Y_AXIS);
Box centerbox = new Box(BoxLayout.Y_AXIS);
Box leftbox = new Box(BoxLayout.Y_AXIS);
panel.add(BorderLayout.EAST, rightbox);
panel.add(BorderLayout.CENTER, centerbox);
panel.add(BorderLayout.WEST, leftbox);
panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
area = new JTextArea(10, 10);
area.setLineWrap(true);
area.setSelectionColor(Color.blue);
JScrollPane scroller = new JScrollPane(area);
scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
panel.add(BorderLayout.NORTH, scroller);
datefield = new JTextField(10);
breakfastfield = new JTextField(5);
lunchfield = new JTextField(5);
dinnerfield = new JTextField(5);
othersfield = new JTextField(5);
centerbox.add(datefield);
centerbox.add(breakfastfield);
centerbox.add(lunchfield);
centerbox.add(dinnerfield);
centerbox.add(othersfield);
Font font = new Font("LALA", Font.BOLD, 14);
JLabel datelabel = new JLabel("日期(格式為XXXX/XX/XX)");
datelabel.setFont(font);
JLabel breakfastlabel = new JLabel("早餐支出");
breakfastlabel.setFont(font);
JLabel lunchlabel = new JLabel("午餐支出");
lunchlabel.setFont(font);
JLabel dinnerlabel = new JLabel("晚餐支出");
dinnerlabel.setFont(font);
JLabel otherslabel = new JLabel("其他支出");
otherslabel.setFont(font);
leftbox.add(datelabel);
leftbox.add(breakfastlabel);
leftbox.add(lunchlabel);
leftbox.add(dinnerlabel);
leftbox.add(otherslabel);
enterbutton = new JButton("輸入帳目");
savebutton = new JButton("儲存到帳目");
displaybutton = new JButton("列出所有帳目資料");
deletebutton = new JButton("刪除目前帳目資料");
rightbox.add(savebutton);
rightbox.add(displaybutton);
rightbox.add(deletebutton);
centerbox.add(enterbutton);
menu = new JMenu("檔案");
JMenuBar menuBar = new JMenuBar();
JMenuItem saveMenuItem = new JMenuItem("另存帳目新檔");
JMenuItem loadMenuItem = new JMenuItem("讀取帳目檔案");
saveMenuItem.addActionListener(new SaveMenuListener());
loadMenuItem.addActionListener(new LoadMenuListener());
menu.add(saveMenuItem);
menu.add(loadMenuItem);
menuBar.add(menu);
frame.setJMenuBar(menuBar);
savebutton.addActionListener(new SaveListener());
displaybutton.addActionListener(new DisplayListener());
enterbutton.addActionListener(new EnterListener());
deletebutton.addActionListener(new DeleteListener());
frame.setSize(300, 300);
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
public class SaveListener implements ActionListener {
public void actionPerformed (ActionEvent ev) {
if (accountList == null) {
accountList = new ArrayList();
}
if (account == null) {
area.setText("錯誤!! 你沒有輸入帳目");
}
else {
accountList.add(account);
account = null;
}
}
}
public class EnterListener implements ActionListener {
public void actionPerformed (ActionEvent ev) {
String date = datefield.getText();
String breakfast = breakfastfield.getText();
String lunch = lunchfield.getText();
String dinner = dinnerfield.getText();
String others = othersfield.getText();
datefield.setText("");
breakfastfield.setText("");
lunchfield.setText("");
dinnerfield.setText("");
othersfield.setText("");
account = new Account(Integer.parseInt(breakfast), Integer.parseInt(lunch),
Integer.parseInt(dinner), Integer.parseInt(others), date);
}
}
public class DisplayListener implements ActionListener {
public void actionPerformed (ActionEvent ev) {
if (accountList != null) {
area.setText("");
for (int i = 0; i < (accountList.size()); i++) {
area.append(accountList.get(i).printAccount()+"\n");
}
} else {
area.setText("目前帳目沒有任何資料");
}
}
}
public class DeleteListener implements ActionListener {
public void actionPerformed (ActionEvent ev) {
accountList = null;
}
}
public class SaveMenuListener implements ActionListener {
public void actionPerformed (ActionEvent ev) {
JFileChooser filechooser = new JFileChooser();
filechooser.showSaveDialog(frame);
streamhelper.saveFile(accountList, filechooser.getSelectedFile());
}
}
public class LoadMenuListener implements ActionListener {
public void actionPerformed (ActionEvent ev) {
JFileChooser filechooser = new JFileChooser();
filechooser.showOpenDialog(frame);
accountList = streamhelper.loadFile(filechooser.getSelectedFile());
}
}
public static void main(String[] args) {
AccountGUIver2 gui = new AccountGUIver2();
gui.buildGUI();
}
}
-----------------------------------------------------------------------------
ArrayList:
package IO.AccountProgram;
import java.util.*;
import java.io.*;
public class ArrayList implements Serializable {
private Account[] elems;
private int next;
private static final long serialVersionUID = -45560544466L;
public ArrayList(int capacity) {
elems = new Account[capacity];
}
public ArrayList() {
this(50);
}
public void add (Account o) {
if (next == elems.length) {
elems = Arrays.copyOf(elems, elems.length*2);
elems[next++] = o;
}
else {
elems[next++] = o;
}
}
public Account get (int i) {
return elems[i];
}
public Account[] getElems() {
return elems;
}
public int size() {
return next;
}
}
------------------------------------------------------------------------------------------------------------------------
StreamHelperver2:
package IO.AccountProgram;
import java.io.*;
public class StreamHelperver2 {
public void saveFile(ArrayList output, File file) {
try (ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(file))) {
os.writeObject(output);
} catch (IOException ex) {
ex.printStackTrace();
}
}
public ArrayList loadFile(File file) {
ArrayList list = null;
try (ObjectInputStream is = new ObjectInputStream(new FileInputStream(file))) {
list = (ArrayList) is.readObject();
} catch (Exception ex) {
ex.printStackTrace();
}
return list;
}
}
-------------------------------------------------------------------------------------------------------------------------