1. 程式人生 > >Java面向物件與多執行緒綜合實驗(四)之GUI設計

Java面向物件與多執行緒綜合實驗(四)之GUI設計

瞭解Java圖形介面程式的基本結構;掌握Java佈局管理和常用元件的使用;掌握Java事件處理機制。

實驗內容
編寫程式,將前面課程所編寫的檔案管理系統改編為圖形使用者介面。要求程式介面選用合適的佈局,綜合使用選單、按鈕、文字框、密碼框、下拉列表、檔案對話方塊等元件,實現良好的人機介面。

本次程式碼沿用第三次中的User.java Administrator.java Operator.java Browser.java DataProcessing.java和Doc.java
所以,在此僅對新的檔案進行整理和釋出。

  • WinMain.java

需要執行的主程式

public class WinMain {
	public static void main(String args[]) {
		LoginWindow window=new LoginWindow();
		window.loginFrame();
	}
}

  • LoginWindow.java

登入視窗介面

import java.awt.Font;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
@SuppressWarnings("serial")
public class LoginWindow extends JFrame{
	JTabbedPane tabbedPane;
	public void loginFrame() {
		JFrame frame=new JFrame();
		frame.setTitle("系統登入");
		frame.setSize(380,300);
		frame.setLocationRelativeTo(null);
		frame.setResizable(false);
		frame.setLayout(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JLabel L1=new JLabel("賬號:");
		JTextField te1=new JTextField(25);
		JLabel L2=new JLabel("密碼:");
		JPasswordField te2=new JPasswordField(25);
		te2.setEchoChar('*');
		L1.setFont(new Font("黑體",Font.PLAIN,18));
		L1.setSize(50,30);
		L1.setBounds(5+30,50,50,30);
		te1.setFont(new Font("黑體",Font.PLAIN,18));
		te1.setSize(250,30);
		te1.setBounds(5+80,50,250,30);
		L2.setFont(new Font("黑體",Font.PLAIN,18));
		L2.setSize(50,30);
		L2.setBounds(5+30,100,50,30);
		te2.setFont(new Font("黑體",Font.PLAIN,18));
		te2.setSize(250,30);
		te2.setBounds(5+80,100,250,30);
		frame.add(L1);
		frame.add(te1);
		frame.add(L2);
		frame.add(te2);
		JButton B1=new JButton("登入");
		JButton B2=new JButton("退出");
		B1.setSize(100,50);
		B1.setBounds((380-100-5)/2-60,(300-50-30)/2+50,100,50);
		B2.setSize(100,50);
		B2.setBounds((380-100-5)/2+60,(300-50-30)/2+50,100,50);
		frame.add(B1);
		frame.add(B2);
		B1.addActionListener(new ButtonHandler(frame,te1,te2));
		B2.addActionListener(new ButtonHandler(frame));
		frame.setVisible(true);
	}
	public class ButtonHandler implements ActionListener{
		public JTextField te1=new JTextField();
	    public JPasswordField te2=new JPasswordField();
	    public JFrame frame=new JFrame();
	    ButtonHandler(JFrame frame){
	    	this.frame=frame;
	    }
	    ButtonHandler(JFrame frame,JTextField te1,JPasswordField te2) {
	    	this.frame=frame;
			this.te1=te1;
			this.te2=te2;
		}
		public void actionPerformed(ActionEvent e) {
			if(e.getActionCommand()=="登入") {
				String name=te1.getText();
				String password=String.valueOf(te2.getPassword());
				try {
					if(DataProcessing.searchUser(name)!=null) {
						if(DataProcessing.search(name ,password)!=null) {
							frame.dispose();
							MenuWindow menuWindow=new MenuWindow();
							menuWindow.showMenu(name);
							addWindowListener(new WindowAdapter() {
								@SuppressWarnings("unused")
								public void WindowClosing(WindowEvent e2) {
									DataProcessing.disconnectFromDatabase();
								}
							});
						}
						else {
							JOptionPane.showMessageDialog(null, "密碼錯誤", "溫馨提示", JOptionPane.ERROR_MESSAGE);
						}
					}
					else {
						JOptionPane.showMessageDialog(null, "賬號不存在", "溫馨提示", JOptionPane.ERROR_MESSAGE);
					}
				} catch (HeadlessException e1) {
					e1.printStackTrace();
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
			}
			else {
				frame.dispose();
			}	
		}
	}
}


  • MenuWindow.java

選單介面

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class MenuWindow {
    public void showMenu(String name) {
    	JFrame frame=new JFrame();
		frame.setTitle("選單介面");
		frame.setSize(1600,1200);
		frame.setLocationRelativeTo(null);
		frame.setResizable(false);
		frame.setLayout(null);
		JMenuBar menu=new JMenuBar();
		JMenu menu1=new JMenu("使用者管理");
		JMenu menu2=new JMenu("檔案管理");
		JMenu menu3=new JMenu("密碼管理");
		JMenuItem item1=new JMenuItem("新增使用者");
		JMenuItem item2=new JMenuItem("修改使用者");
		JMenuItem item3=new JMenuItem("刪除使用者");
		JMenuItem item4=new JMenuItem("上傳檔案");
		JMenuItem item5=new JMenuItem("下載檔案");
		JMenuItem item6=new JMenuItem("修改密碼");
		String role = null;
		try {
			role=DataProcessing.searchUser(name).getRole();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		if(role.equals("administrator")) {
			menu1.setEnabled(true);
			menu2.setEnabled(true);
			menu3.setEnabled(true);
			item1.setEnabled(true);
			item2.setEnabled(true);
			item3.setEnabled(true);
			item4.setEnabled(false);
			item5.setEnabled(true);
			item6.setEnabled(true);
		}
		else if(role.equals("operator")){
			menu1.setEnabled(false);
			menu2.setEnabled(true);
			menu3.setEnabled(true);
			item1.setEnabled(false);
			item2.setEnabled(false);
			item3.setEnabled(false);
			item4.setEnabled(true);
			item5.setEnabled(true);
			item6.setEnabled(true);
		}
		else if(role.equals("browser")){
			menu1.setEnabled(false);
			menu2.setEnabled(true);
			menu3.setEnabled(true);
			item1.setEnabled(false);
			item2.setEnabled(false);
			item3.setEnabled(false);
			item4.setEnabled(false);
			item5.setEnabled(true);
			item6.setEnabled(true);
		}
		menu1.add(item1);
		menu1.add(item2);
		menu1.add(item3);
		menu2.add(item4);
		menu2.add(item5);
		menu3.add(item6);
		menu.add(menu1);
		menu.add(menu2);
		menu.add(menu3);
		menu.setSize(195,30);
		menu.setBounds(0,0,195,30);
		menu.setVisible(true);
		frame.add(menu);
		item1.addActionListener(new MenuAction(name));
		item2.addActionListener(new MenuAction(name));
		item3.addActionListener(new MenuAction(name));
		item4.addActionListener(new MenuAction(name));
		item5.addActionListener(new MenuAction(name));
		item6.addActionListener(new MenuAction(name));
		frame.setVisible(true);
    }
    class MenuAction implements ActionListener{
    	String name;
    	MenuAction(String name){
    		this.name=name;
    	}
		public void actionPerformed(ActionEvent e) {
			if(e.getActionCommand()=="新增使用者") {
				UserWindow userWindow=new UserWindow();
				userWindow.showMenu(name,0);
			}
			else if(e.getActionCommand()=="修改使用者") {
				UserWindow userWindow=new UserWindow();
				userWindow.showMenu(name,1);
			}
			else if(e.getActionCommand()=="刪除使用者") {
				UserWindow userWindow=new UserWindow();
				userWindow.showMenu(name,2);
			}
			else if(e.getActionCommand()=="上傳檔案") {
				UpDownloadWindow updownloadWindow=new UpDownloadWindow();
				updownloadWindow.showMenu(name,1);
			}
			else if(e.getActionCommand()=="下載檔案") {
				UpDownloadWindow updownloadWindow=new UpDownloadWindow();
				updownloadWindow.showMenu(name,0);
			}
			else if(e.getActionCommand()=="修改密碼") {
				PasswordWindow passwordWindow=new PasswordWindow();
				passwordWindow.showMenu(name);
			}
		}
    }
}

  • UserWindow.java

使用者更改介面

import java.awt.Font;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.Enumeration;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;

public class UserWindow{
	String admin_name;
	public void showMenu(String name,int index) {
		admin_name=name;
		JFrame frame=new JFrame();
		frame.setTitle("使用者管理介面");
		frame.setSize(380,300);
		frame.setLocationRelativeTo(null);
		frame.setResizable(false);
		JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
		JPanel panel_add=new JPanel();
		panel_add.setLayout(null);
		tabbedPane.addTab("新增使用者", panel_add);
		JLabel L1=new JLabel("賬號:");
		JTextField te1=new JTextField(25);
		JLabel L2=new JLabel("密碼:");
		JPasswordField te2=new JPasswordField(25);
		JLabel L3=new JLabel("角色:");
		String role[]= {"administrator","operator","browser"};
		JComboBox<String> box=new JComboBox<String>(role);
		te2.setEchoChar('*');
		L1.setFont(new Font("黑體",Font.PLAIN,18));
		L1.setSize(50,30);
		L1.setBounds(5+30,30,50,30);
		te1.setFont(new Font("黑體",Font.PLAIN,18));
		te1.setSize(250,30);
		te1.setBounds(5+80,30,250,30);
		L2.setFont(new Font("黑體",Font.PLAIN,18));
		L2.setSize(50,30);
		L2.setBounds(5+30,80,50,30);
		te2.setFont(new Font("黑體",Font.PLAIN,18));
		te2.setSize(250,30);
		te2.setBounds(5+80,80,250,30);
		L3.setFont(new Font("黑體",Font.PLAIN,18));
		L3.setSize(50,30);
		L3.setBounds(5+30,130,50,30);
		box.setFont(new Font("黑體",Font.PLAIN,18));
		box.setSize(200,30);
		box.setBounds(5+80,130,200,30);
		panel_add.add(L1);
		panel_add.add(te1);
		panel_add.add(L2);
		panel_add.add(te2);
		panel_add.add(L3);
		panel_add.add(box);
		JButton B1=new JButton("新增");
		JButton B2=new JButton("退出");
		B1.setSize(80,40);
		B1.setBounds((380-80-5)/2-60,(300-40-30)/2+50,80,40);
		B2.setSize(80,40);
		B2.setBounds((380-80-5)/2+60,(300-40-30)/2+50,80,40);
		panel_add.add(B1);
		panel_add.add(B2);
		B1.addActionListener(new ButtonHandler(frame,te1,te2,box));
		B2.addActionListener(new ButtonHandler(frame));
	
		String[] columnName={"使用者名稱","密碼","角色"};
		String[][] rowData=new String[50][3];
		Enumeration<User> e=null;
		try {
			e = DataProcessing.getAllUser();
		} 
		catch (SQLException e1) {
			e1.printStackTrace();;
		}
		User user;
		String[] nameData=new String[50];
		int i=0;
		while(e.hasMoreElements()) {
			user=e.nextElement();
			nameData[i]=rowData[i][0]=user.getName();
			rowData[i][1]=user.getPassword();
			rowData[i][2]=user.getRole();
			i++;
		}
		
		JPanel panel_mod=new JPanel();
		panel_mod.setLayout(null);
		tabbedPane.addTab("修改使用者", panel_mod);
		JLabel L4=new JLabel("賬號:");
		JComboBox<String> box_name=new JComboBox<String>(nameData);
		JLabel L5=new JLabel("密碼:");
		JPasswordField te4=new JPasswordField(25);
		JLabel L6=new JLabel("角色:");
		JComboBox<String> box2=new JComboBox<String>(role);
		te4.setEchoChar('*');
		L4.setFont(new Font("黑體",Font.PLAIN,18));
		L4.setSize(50,30);
		L4.setBounds(5+30,30,50,30);
		box_name.setFont(new Font("黑體",Font.PLAIN,18));
		box_name.setSize(250,30);
		box_name.setBounds(5+80,30,250,30);
		L5.setFont(new Font("黑體",Font.PLAIN,18));
		L5.setSize(50,30);
		L5.setBounds(5+30,80,50,30);
		te4.setFont(new Font("黑體",Font.PLAIN,18));
		te4.setSize(250,30);
		te4.setBounds(5+80,80,250,30);
		L6.setFont(new Font("黑體",Font.PLAIN,18));
		L6.setSize(50,30);
		L6.setBounds(5+30,130,50,30);
		box2.setFont(new Font("黑體",Font.PLAIN,18));
		box2.setSize(200,30);
		box2.setBounds(5+80,130,200,30);
		panel_mod.add(L4);
		panel_mod.add(box_name);
		panel_mod.add(L5);
		panel_mod.add(te4);
		panel_mod.add(L6);
		panel_mod.add(box2);
		JButton B3=new JButton("修改");
		JButton B4=new JButton("退出");
		B3.setSize(80,40);
		B3.setBounds((380-80-5)/2-60,(300-40-30)/2+50,80,40);
		B4.setSize(80,40);
		B4.setBounds((380-80-5)/2+60,(300-40-30)/2+50,80,40);
		panel_mod.add(B3);
		panel_mod.add(B4);
		B3.addActionListener(new ButtonHandler(frame,box_name,te4,box2));
		B4.addActionListener(new ButtonHandler(frame));
		
		JPanel panel_del=new JPanel();
		panel_del.setLayout(null);
		tabbedPane.addTab("刪除使用者", panel_del);
		@SuppressWarnings("serial")
		JTable table=new JTable(rowData,columnName) {
			public boolean isCellEditable(int rowIndex,int ColIndex) {
				return false;
			}
		};
		table.setFont(new Font("黑體",Font.PLAIN,18));
		table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		JScrollPane scroll=new JScrollPane(table);
		scroll.setVisible(true);
		scroll.setSize(380,160);
		scroll.setBounds(0,0,380,160);
		panel_del.add(scroll);
		JButton B5=new JButton("刪除");
		JButton B6=new JButton("退出");
		B5.setSize(80,40);
		B5.setBounds((380-80-5)/2-60,(300-40-30)/2+50,80,40);
		B6.setSize(80,40);
		B6.setBounds((380-80-5)/2+60,(300-40-30)/2+50,80,40);
		panel_del.add(B5);
		panel_del.add(B6);
		B5.addActionListener(new ButtonHandler(frame,table));
		B6.addActionListener(new ButtonHandler(frame));
		tabbedPane.setVisible(true);
		tabbedPane.setSelectedIndex(index);
		frame.add(tabbedPane);
		frame.setVisible(true);		
	}
	public class ButtonHandler implements ActionListener{
		public JTextField te1=new JTextField();
	    public JPasswordField te2=new JPasswordField();
	    public JFrame frame=new JFrame();
	    public JComboBox<String> box=new JComboBox<String>();
	    public JComboBox<String> box_name=new JComboBox<String>();
	    public JTable table;
	    public String role;
	    ButtonHandler(JFrame frame){
	    	this.frame=frame;
	    }
	    ButtonHandler(JFrame frame,JTextField te1,JPasswordField te2,JComboBox<String> box){
	    	this.frame=frame;
			this.te1=te1;
			this.te2=te2;
			this.box=box;
	    }
	    ButtonHandler(JFrame frame,JComboBox<String> box_name,JPasswordField te2,JComboBox<String> box) {
	    	this.frame=frame;
			this.box_name=box_name;
			this.te2=te2;
			this.box=box;
		}
	    ButtonHandler(JFrame frame,JTable table) {
	    	this.frame=frame;
			this.table=table;
		}
		public void actionPerformed(ActionEvent e) {
			String name=te1.getText();
			String password=String.valueOf(te2.getPassword());
			if(e.getActionCommand().equals("修改")) {
				try {
					name=(String)box_name.getSelectedItem();
					if(DataProcessing.searchUser(name)!=null) {
						role=(String)box.getSelectedItem();
						DataProcessing.update(name, password, role);
						JOptionPane.showMessageDialog(null, "修改成功", "溫馨提示", JOptionPane.PLAIN_MESSAGE);
						frame.dispose();
						UserWindow userWindow=new UserWindow();
						userWindow.showMenu(admin_name,1);
					}
					else {
						JOptionPane.showMessageDialog(null, "賬號不存在", "溫馨提示", JOptionPane.ERROR_MESSAGE);
					}
				} catch (HeadlessException e1) {
					e1.printStackTrace();
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
			}
			else if(e.getActionCommand().equals("新增")){
				role=(String)box.getSelectedItem();
				try {
					DataProcessing.insert(name, password, role);
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
				JOptionPane.showMessageDialog(null, "新增成功", "溫馨提示", JOptionPane.PLAIN_MESSAGE);
				frame.dispose();
				UserWindow userWindow=new UserWindow();
				userWindow.showMenu(admin_name,0);
			}	
			else if(e.getActionCommand().equals("刪除")){
				if(table.getSelectedRow()<0) ; 
				else {
					String name_del=(String) table.getValueAt(table.getSelectedRow(), 0);
					if(name_del.equals(admin_name)) {
						JOptionPane.showMessageDialog(null, "無法刪除", "溫馨提示", JOptionPane.ERROR_MESSAGE);
					}
					else {
						try {
							if(DataProcessing.delete(name_del)) {
								JOptionPane.showMessageDialog(null, "刪除成功", "溫馨提示", JOptionPane.PLAIN_MESSAGE);
					
							}
							else {
								JOptionPane.showMessageDialog(null, "賬號不存在", "溫馨提示", JOptionPane.ERROR_MESSAGE);
							}
						} catch (SQLException e1) {
							e1.printStackTrace();
						}
						frame.dispose();
						UserWindow userWindow=new UserWindow();
						userWindow.showMenu(admin_name,2);
					}
					
				}
			}	
			else if(e.getActionCommand().equals("退出")) {
				frame.dispose();
			}
		}
	}
}

  • UpDownloadWindow.java

上傳下載介面

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Enumeration;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;

public class UpDownloadWindow {
    String user_name;
    String uploadpath="C:\\uploadfile\\";
    String downloadpath="C:\\downloadfile\\";
    public void showMenu(String name,int index) {
        user_name=name;
    	JFrame frame=new JFrame();
        frame.setTitle("檔案管理介面");
		frame.setSize(460,400);
		frame.setLocationRelativeTo(null);
		frame.setResizable(false);
		
		JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
		JPanel panel_download=new JPanel();
		panel_download.setLayout(null);
		tabbedPane.addTab("檔案下載", panel_download);
		String[] columnName={"ID","Creator","Time","FileName","Description"};
		String[][] rowData=new String[50][5];
		Enumeration<Doc> e=null;
		try {
			e = DataProcessing.getAllDocs();
		} 
		catch (SQLException e1) {
			e1.printStackTrace();;
		}
		Doc doc;
		String[] nameData=new String[50];
		int i=0;
		while(e.hasMoreElements()) {
			doc=e.nextElement();
			nameData[i]=rowData[i][0]=doc.getID();
			rowData[i][1]=doc.getCreator();
			rowData[i][2]=doc.getTimestamp().toString();
			rowData[i][3]=doc.getFilename();
			rowData[i][4]=doc.getDescription();
			i++;
		}
		@SuppressWarnings("serial")
		JTable table=new JTable(rowData,columnName) {
			public boolean isCellEditable(int rowIndex,int ColIndex) {
				return false;
			}
		};
		table.setFont(new Font("黑體",Font.PLAIN,18));
		table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		JScrollPane scroll=new JScrollPane(table);
		scroll.setVisible(true);
		scroll.setSize(460,160);
		scroll.setBounds(0,0,460,160);
		//scroll.setHorizontalScrollBarPolicy(scroll.HORIZONTAL_SCROLLBAR_ALWAYS);
		panel_download.add(scroll);
		JButton B1=new JButton("下載");
		JButton B2=new JButton("退出");
		B1.setSize(80,40);
		B1.setBounds((460-80-5)/2-60,(400-40-30)/2+50,80,40);
		B2.setSize(80,40);
		B2.setBounds((460-80-5)/2+60,(400-40-30)/2+50,80,40);
		B1.addActionListener(new ButtonHandler(frame,table));
		B2.addActionListener(new ButtonHandler(frame));
		panel_download.add(B1);
		panel_download.add(B2);
		
		JPanel panel_upload=new JPanel();
		panel_upload.setLayout(null);
		tabbedPane.addTab("檔案上傳", panel_upload);
		JLabel L1=new JLabel("檔案號:");
		JTextField te1=new JTextField(25);
		JLabel L2=new JLabel("檔案描述:");
		JTextArea te2=new JTextArea(6,25);
		JLabel L3=new JLabel("檔案檔名:");
		JTextField te3=new JTextField(25);
		L1.setFont(new Font("黑體",Font.PLAIN,18));
		L1.setSize(100,30);
		L1.setBounds(5,0,100,30);
		te1.setFont(new Font("黑體",Font.PLAIN,18));
		te1.setSize(250,30);
		te1.setBounds(5+100,0,250,30);
		L2.setFont(new Font("黑體",Font.PLAIN,18));
		L2.setSize(100,30);
		L2.setBounds(5,50,100,30);
		te2.setFont(new Font("黑體",Font.PLAIN,18));
		te2.setSize(250,150);
		te2.setBounds(5+100,50,250,150);
		L3.setFont(new Font("黑體",Font.PLAIN,18));
		L3.setSize(100,30);
		L3.setBounds(5,250,100,30);
		te3.setFont(new Font("黑體",Font.PLAIN,18));
		te3.setSize(250,30);
		te3.setBounds(5+100,250,250,30);
		panel_upload.add(L1);
		panel_upload.add(L2);
		panel_upload.add(L3);
		panel_upload.add(te1);
		panel_upload.add(te2);
		panel_upload.add(te3);
		JButton B3=new JButton("開啟");
		JButton B4=new JButton("上傳");
		JButton B5=new JButton("取消");
		B3.setSize(80,40);
		B3.setBounds(5+350,250,80,40);
		B4.setSize(80,40);
		B4.setBounds((460-80-5)/2-60,290,80,40);
		B5.setSize(80,40);
		B5.setBounds((460-80-5)/2+60,290,80,40);
		B3.addActionListener(new ButtonHandler(te3));
		B4.addActionListener(new ButtonHandler(frame,te1,te2,te3));
		B5.addActionListener(new ButtonHandler(frame));
		panel_upload.add(B3);
		panel_upload.add(B4);
		panel_upload.add(B5);
		tabbedPane.setVisible(true);
		tabbedPane.setSelectedIndex(index);
		try {
			if(DataProcessing.searchUser(user_name).getRole().equals("operator")) {
			    tabbedPane.setEnabledAt(1, true);
			}
			else tabbedPane.setEnabledAt(1, false);
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
		frame.add(tabbedPane);
        frame.setVisible(true);  
    }
    public class ButtonHandler implements ActionListener{
    	JTextField te1;
    	JTextArea te2;
    	JTextField te3;
    	JFrame frame;
		JTable table=new JTable();
    	ButtonHandler(JTextField te3){
    		this.te3=te3;
    	}
    	ButtonHandler(JFrame frame,JTextField te1,JTextArea te2,JTextField te3){
    		this.frame=frame;
    		this.te1=te1;
    		this.te2=te2;
    		this.te3=te3;
    	}
    	ButtonHandler(JFrame frame){
    		this.frame=frame;
    	}
		ButtonHandler(JFrame frame,JTable table) {
	    	this.frame=frame;
			this.table=table;
		}
    	public void actionPerformed(ActionEvent e) {
	    	JFileChooser fileChooser=new JFileChooser();
		    if(e.getActionCommand()=="下載") {
		    	int op=JOptionPane.showConfirmDialog(null, "確認下載", "溫馨提示", JOptionPane.YES_NO_OPTION);
		    	if(op==JOptionPane.YES_OPTION) {
			    	if(table.getSelectedRow()<0) ; 
			    	else {
			    		String id=(String)table.getValueAt(table.getSelectedRow(), 0);
			    		byte[] buffer=new byte[1024];
			       	    Doc doc=null;
			   	    	 try {
			   	    		 doc = DataProcessing.searchDoc(id);
			   	    	 } 
			      		 catch (SQLException e1) {
			   	    		 e1.printStackTrace();
			      		 }
			        	 File tempFile=new File(uploadpath+doc.getFilename());
			        	 String filename=tempFile.getName();
			        	 BufferedInputStream infile = null;
						try {
							infile = new BufferedInputStream(new FileInputStream(tempFile));
						} catch (FileNotFoundException e1) {
							e1.printStackTrace();
						}
			         	 BufferedOutputStream targetfile = null;
						try {
							targetfile = new BufferedOutputStream(new FileOutputStream(new File(downloadpath+filename)));
						} catch (FileNotFoundException e1) {
							e1.printStackTrace();
						}
			        	 while(true) {
			        		 int byteRead = 0;
							try {
								byteRead = infile.read(buffer);
							} catch (IOException e1) {
								e1.printStackTrace();
							}
			        		 if(byteRead==-1)
			       	 		 break;
			       	    	 try {
								targetfile.write(buffer,0,byteRead);
							} catch (IOException e1) {
								e1.printStackTrace();
							}
			        	 }
			       	     try {
							infile.close();
						} catch (IOException e1) {
							e1.printStackTrace();
						}
			        	 try {
							targetfile.close();
						} catch (IOException e1) {
							e1.printStackTrace();
						}
			        	JOptionPane.showMessageDialog(null, "下載成功", "溫馨提示", JOptionPane.PLAIN_MESSAGE);
			    	}
		    	}
		    }
		    else if(e.getActionCommand()=="退出") {
		    	frame.dispose();
		    }
		    else if(e.getActionCommand()=="開啟") {
    			fileChooser.setFileSelectionMode(0);
    			int state=fileChooser.showOpenDialog(null);
    			if(state==1) {
    				return ;
    			}
    			else {
    				File file=fileChooser.getSelectedFile();
    				te3.setText(file.getAbsolutePath());
    			}
    		}
    		else if(e.getActionCommand()=="上傳"){
    			int op=JOptionPane.showConfirmDialog(null, "確認上傳", "溫馨提示", JOptionPane.YES_NO_OPTION);
    			if(op==JOptionPane.YES_OPTION) {
    				String ID=te1.getText();
        			String description=te2.getText();
        			String filename=te3.getText();
        			byte[] buffer=new byte[1024];
        	   	    Timestamp timestamp=new Timestamp(System.currentTimeMillis());
        	   	    File tempFile=new File(filename.trim());
        	        String fileName=tempFile.getName();
        	   	    try {
        				if(DataProcessing.insertDoc(ID,user_name,timestamp,description,fileName)) ;
        				else JOptionPane.showMessageDialog(null, "存入資料庫失敗", "溫馨提示", JOptionPane.ERROR_MESSAGE);
        			} 
        			catch (SQLException e1) {
        				e1.printStackTrace();
        			}
        	   	    BufferedInputStream infile = null;
        		    try {
    					infile = new BufferedInputStream(new FileInputStream(filename));
    				} catch (FileNotFoundException e1) {
    					e1.printStackTrace();
    				}
        	   	    BufferedOutputStream targetfile = null;
        			try {
    					targetfile = new BufferedOutputStream(new FileOutputStream(new File(uploadpath+fileName)));
    				} catch (FileNotFoundException e1) {
    					e1.printStackTrace();
    				}
        	   	    while(true) {
        	   		    int byteRead = 0;
        			    try {
    						byteRead = infile.read(buffer);
    					} catch (IOException e1) {
    						e1.printStackTrace();
    					}
        	   		    if(byteRead==-1)
        	   		        break;
        			    try {
    						targetfile.write(buffer,0,byteRead);
    					} catch (IOException e1) {
    						e1.printStackTrace();
    					}
        	   	    }
        			try {
    					infile.close();
    				} catch (IOException e1) {
    					e1.printStackTrace();
    				}
        			try {
    					targetfile.close();
    				} catch (IOException e1) {
    					e1.printStackTrace();
    				}
        			JOptionPane.showMessageDialog(null, "上傳成功", "溫馨提示", JOptionPane.PLAIN_MESSAGE);
        			frame.dispose();
    				UpDownloadWindow updownloadWindow=new UpDownloadWindow();
    				updownloadWindow.showMenu(user_name,1);
    			}
    			else if(op==JOptionPane.NO_OPTION) {
    				;
    			}
    		}
    		else if(e.getActionCommand()=="取消") {
    			frame.dispose();
    		}
    	}
    }
}

  • PasswordWindow.java

密碼修改介面

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class PasswordWindow {
    String user_name;
    String user_role;
    public void showMenu(String name) {
        user_name=name;
        try {
			user_role=DataProcessing.searchUser(user_name).getRole();
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
        JFrame frame=new JFrame();
		frame.setTitle("密碼修改介面");
		frame.setSize(380,400);
		frame.setLocationRelativeTo(null);
		frame.setResizable(false);
		frame.setLayout(null);
		
		JLabel L1=new JLabel("賬號:");
		JTextField te1=new JTextField(25);
		JLabel L2=new JLabel("舊密碼:");
		JPasswordField te2=new JPasswordField(25);
		te2.setEchoChar('*');
		JLabel L3=new JLabel("新密碼:");
		JPasswordField te3=new JPasswordField(25);
		te3.setEchoChar('*');
		JLabel L4=new JLabel("重複密碼:");
		JPasswordField te4=new JPasswordField(25);
		te4.setEchoChar('*');
		JLabel L5=new JLabel("角色:");
		JTextField te5=new JTextField(25);
		L1.setFont(new Font("黑體",Font.PLAIN,18));
		L1.setSize(100,30);
		L1.setBounds(5,30,100,30);
		te1.setFont(new Font("黑體",Font.PLAIN,18));
		te1.setSize(250,30);
		te1.setBounds(5+100,30,250,30);
		L2.setFont(new Font("黑體",Font.PLAIN,18));
		L2.setSize(100,30);
		L2.setBounds(5,80,100,30);
		te2.setFont(new Font("黑體",Font.PLAIN,18));
		te2.setSize(250,30);
		te2.setBounds(5+100,80,250,30);
		L3.setFont(new Font("黑體",Font.PLAIN,18));
		L3.setSize(100,30);
		L3.setBounds(5,130,100,30);
		te3.setFont(new Font("黑體",Font.PLAIN,18));
		te3.setSize(250,30);
		te3.setBounds(5+100,130,250,30);
		L4.setFont(new Font("黑體",Font.PLAIN,18));
		L4.setSize(100,30);
		L4.setBounds(5,180,100,30);
		te4.setFont(new Font("黑體",Font.PLAIN,18));
		te4.setSize(250,30);
		te4.setBounds(5+100,180,250,30);
		L5.setFont(new Font("黑體",Font.PLAIN,18));
		L5.setSize(100,30);
		L5.setBounds(5,230,100,30);
		te5.setFont(new Font("黑體",Font.PLAIN,18));
		te5.setSize(250,30);
		te5.setBounds(5+100,230,250,30);
		frame.add(L1);
		frame.add(L2);
		frame.add(L3);
		frame.add(L4);
		frame.add(L5);
		frame.add(te1);
		frame.add(te2);
		frame.add(te3);
		frame.add(te4);
		frame.add(te5);
		te1.setText(user_name);
		te1.setEnabled(false);
		te5.setText(user_role);
		te5.setEnabled(false);
		JButton B1=new JButton("確認");
		JButton B2=new JButton("退出");
		B1.setSize(80,40);
		B1.setBounds((380-80-5)/2-60,300,80,40);
		B2.setSize(80,40);
		B2.setBounds((380-80-5)/2+60,300,80,40);
		B1.addActionListener(new ButtonHandler(frame,te2,te3,te4));
		frame.add(B1);
		frame.add(B2);
		frame.setVisible(true);
    }
    public class ButtonHandler implements ActionListener{
    	JFrame frame;
    	JTextField te2;
    	JTextField te3;
    	JTextField te4;
    	ButtonHandler(JFrame frame,JTextField te2,JTextField te3,JTextField te4){
    		this.frame=frame;
    		this.te2=te2;
    		this.te3=te3;
    		this.te4=te4;
    	}
		public void actionPerformed(ActionEvent e) {
			String old_password=te2.getText();
			String new_password=te3.getText();
			String new_password2=te4.getText();
			if(e.getActionCommand()=="確認") {
				try {
					if(DataProcessing.search(user_name, old_password)!=null) {
						if(new_password.equals(new_password2)) {
							DataProcessing.update(user_name, new_password, user_role);
							frame.dispose();
							JOptionPane.showMessageDialog(null, "修改成功", "溫馨提示", JOptionPane.PLAIN_MESSAGE);
						}
						else {
							JOptionPane.showMessageDialog(null, "兩次輸入的新密碼不一致", "溫馨提示", JOptionPane.ERROR_MESSAGE);
						}
					}
					else {
						JOptionPane.showMessageDialog(null, "密碼錯誤", "溫馨提示", JOptionPane.ERROR_MESSAGE);
					}
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
			}
			else if(e.getActionCommand()=="退出"){
				frame.dispose();
			}
		}	
    }
}

以下是需要完成的結果展示:Java面向物件與多執行緒綜合實驗(四)之GUI設計