How to use : Java GUI Authorized Menu Admin/User (Menu Level) |
How to use : Java GUI Authorized Menu Admin/User (Menu Level) บทความนี้ถือว่าเป็นสุดยอดของการเขียน Java GUI แบบ Advanced ในอีกรูปแบบหนึ่ง โดยในตัวอย่างนี้จะเป็นการเขียนระบบ Menu Level ระหว่าง User และ Admin โดยเราจะออกแบบฐานข้อมูลเก็บผู้ใช้แบ่งสถานะว่าเป็น Admin หรือ User ซึ่งเมื่อผู้ใช้ทำการ Login เข้าไปในโปรแกรมก็จะเห็น Menu ตามสิทธิ์ของตัวเอง และในบทความนี้ยังมีการประยุกต์ใช้การ Login กับ JDialog แบบ Custom ไว้รับค่า Username และ Password รูปแบบการเขียนก็ง่าย แต่เต็มไปด้วยความรู้มากมายจริง ๆ
How to use : Java GUI Authorized Menu Admin/User (Menu Level)
Admin Menu Level
User Menu Level
ในตัวอย่างนี้จะเลือกใช้ Database ของ MySQL แต่ในกรณีที่จะใช้ร่วมกับ Database อื่น ๆ ก็สามารถทำได้ง่าย ๆ เพียงแค่เปลี่ยน Connector และ Connection String เท่านั้น สามารถอ่านเพิ่มเติมได้ที่บทความนี้
Java Connect to MySQL Database (JDBC)
โครงสร้างของ MySQL และ Table
CREATE TABLE `member` (
`UserID` int(4) unsigned zerofill NOT NULL auto_increment,
`Username` varchar(20) NOT NULL,
`Password` varchar(20) NOT NULL,
`Email` varchar(150) NOT NULL,
`Name` varchar(250) NOT NULL,
`Level` enum('Admin','User') NOT NULL default 'User',
PRIMARY KEY (`UserID`),
UNIQUE KEY `User` (`Username`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
--
-- dump ตาราง `member`
--
INSERT INTO `member` VALUES (0001, 'weerachai', 'weerachai@1', '[email protected]', 'Weerachai Nukitram', 'Admin');
INSERT INTO `member` VALUES (0002, 'surachai', 'surachai@2', '[email protected]', 'Surachai Sirisart', 'User');
INSERT INTO `member` VALUES (0003, 'adisorn', 'adisorn@3', '[email protected]', 'Adisorn Bonsong', 'User');
คำสั่งของ SQL ที่สามารถนำไปรันบน Query เพื่อสร้าง Table และ Rows ได้ทันที สังเกตุว่ามีฟิวด์ Level เก็บว่าเป็น User หรือ Admin
Example ตัวอย่างการทำระบบ Login Username และ Password และการแบ่งสิทธิ์ Menu Level ระหว่าง Admin กับ User
MyForm.java
package com.java.myapp;
import java.awt.EventQueue;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import java.awt.Font;
public class MyForm extends JFrame {
public static String userName;
public static String passWord;
static JLabel lblWelcome;
public static String sLevel;
static JMenuBar menuBar;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
MyForm form = new MyForm();
form.setVisible(true);
}
});
}
public MyForm() {
// Create Form Frame
super("ThaiCreate.Com Tutorial");
setSize(679, 385);
setLocation(500, 280);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
// Label Welcome
lblWelcome = new JLabel("lblWelcome",JLabel.CENTER);
lblWelcome.setFont(new Font("Tahoma", Font.PLAIN, 20));
lblWelcome.setBounds(168, 110, 336, 25);
getContentPane().add(lblWelcome);
// Menu Bar
menuBar = new JMenuBar();
setJMenuBar(menuBar);
// When Frame Loaded
addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
OpenDialog();
}
});
}
public static void RenderMenu() {
if(sLevel.equals("Admin")) {
// Menu Admin
JMenu menuAdmin = new JMenu("Admin Menu");
JMenuItem menu1 = new JMenuItem("Admin Sub Menu 1");
JMenuItem menu2 = new JMenuItem("Admin Sub Menu 2");
menuAdmin.add(menu1);
menuAdmin.add(menu2);
menuBar.add(menuAdmin);
} else {
// Menu User
JMenu menuUser = new JMenu("User Menu");
JMenuItem menu1 = new JMenuItem("User Sub Menu 1");
JMenuItem menu2 = new JMenuItem("User Sub Menu 2");
menuUser.add(menu1);
menuUser.add(menu2);
menuBar.add(menuUser);
}
}
public static Boolean getLogin() {
Connection connect = null;
PreparedStatement pre = null;
Boolean status = false;
try {
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager.getConnection("jdbc:mysql://localhost/mydatabase" +
"?user=root&password=root");
String sql = " SELECT * FROM member " +
" WHERE Username = ? " +
" AND Password = ? ";
pre = connect.prepareStatement(sql);
pre.setString(1, userName);
pre.setString(2, passWord);
ResultSet rec = pre.executeQuery();
if(rec.next()) {
lblWelcome.setText("Welcome : " + rec.getString("Name"));
sLevel = rec.getString("Level");
status = true;
} else {
JOptionPane.showMessageDialog(null, "Incorrect Username/Password");
}
} catch (Exception e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, e.getMessage());
e.printStackTrace();
}
try {
if(pre != null) {
pre.close();
connect.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
e.printStackTrace();
}
return status;
}
public static void OpenDialog() {
LoginDialog dialog = new LoginDialog();
dialog.setModal(true);
dialog.setVisible(true);
userName = dialog.sUsername;
passWord = dialog.sPassword;
// Check Login
if(!getLogin()){
OpenDialog(); // Login Again
} else {
RenderMenu(); // Login Success
}
}
}
Output
LoginDialog.java
package com.java.myapp;
import javax.swing.JButton;
import javax.swing.JDialog;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
public class LoginDialog extends JDialog {
public String sUsername;
public String sPassword;
public static void main(String[] args) {
try {
LoginDialog dialog = new LoginDialog();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
public LoginDialog() {
setBounds(100, 100, 296, 175);
setTitle("Login Username/Password");
setResizable(false);
setLocationRelativeTo(null);
getContentPane().setLayout(null);
// Label Username
JLabel lblUsername = new JLabel("Username");
lblUsername.setBounds(33, 25, 82, 14);
getContentPane().add(lblUsername);
// Label Password
JLabel lblPassword = new JLabel("Password");
lblPassword.setBounds(33, 56, 64, 14);
getContentPane().add(lblPassword);
// Input Username
final JTextField username = new JTextField();
username.setBounds(125, 22, 101, 20);
getContentPane().add(username);
// Input Password
final JPasswordField password = new JPasswordField();
password.setBounds(125, 53, 101, 20);
getContentPane().add(password);
// Button OK
JButton btnOK = new JButton("OK");
btnOK.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sUsername = username.getText();
sPassword = new String(password.getPassword());
dispose();
}
});
btnOK.setBounds(70, 102, 78, 23);
getContentPane().add(btnOK);
// Button Cancel
JButton btnCancel = new JButton("Cancel");
btnCancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sUsername = "";
sPassword = "";
System.exit(0);
}
});
btnCancel.setBounds(158, 102, 74, 23);
getContentPane().add(btnCancel);
}
}
Output
แสดง Dialog แบบ Custom ด้วย JDialog สำหรับรับค่า Username และ Password
กรณทีข้อมูล Login ไม่ถูกต้อง
กรณีที่เป็น Admin ก็จะเห็น Menu ของ Admin
กรณีที่เป็น User ก็จะเห็น Menu ของ User
การใช้งาน Menu และการปรับแต่ง Menu
กรณีที่ใช้ร่วมกับ Database อื่น ๆ สามารถดูวิธีการใช้ Connector และ Connection String ได้ที่นี่
Property & Method (Others Related) |
|
ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท
|
|
|
By : |
ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ) |
|
Score Rating : |
|
|
|
Create/Update Date : |
2013-09-10 10:05:39 /
2017-03-27 21:53:38 |
|
Download : |
No files |
|
Sponsored Links / Related |
|
|
|
|
|
|
|