How to use : Java GUI Pass Variable / Class Between Frame |
How to use : Java GUI Pass Variable / Class Between Frame บทความนี้เป็นสุดยอดเทคนิคที่น้อยคนจะรู้และเข้าใจเกี่ยวกับ Java GUI และการส่งค่าตัวแปรระหว่าง Class เพราะในปกติแล้ว Java GUI จะไม่มีตัวแปร Session เหมือน Web Application แต่ที่ Java GUI มีและดีกว่าก็คือ สามารถส่งค่า ตัวแปร หรือ Object ต่าง ๆ ข้าม Frame หรือ Class ได้ โดยไม่ต้องโยนค่าเป็นถอด ๆ ผ่านพวก Property เพียงแต่สร้าง Class ไว้จากนั้น Assign ค่าต่าง ๆ ผ่าน set method ของ Class นั้น ๆ จากนั้นตัวแปร Class ชุดนั้นเราจะสามารถ get ใน Class อื่น ๆ ได้เลยทันที ซึ่งจะเหมาะใช้จัดเก็บตัวแปรแบบ Global อาทิเช่น เก็บข้อมูลการ Login ของ User ที่จำเป็นจะต้องใช้ในส่วนต่าง ๆ ของโปรแกรม ลองดูภาพประกอบแล้วจะเข้าใจมากขึ้น
How to use : Java GUI Pass Variable / Class Between Frame
จากภาพจะเห็นว่าหลังจากที่ Login เราจะทำการ set ค่าไปยัง Class ของ User ซึ่งอาจจะเก็บเป็นพวก UserID จากนั้นใน Frame หรือ Class อื่น ๆ เราสามารถ get ค่า UserID จาก Class นั้นได้ทันที โดยที่ไม่จำเป็นจะต้องส่งค่าจาก Frame ต่อ Frame
Syntax
public class UserClass {
public static String sUsername;
public static String sName;
// Username
public void setUsername(String username){
sUsername = username;
}
public static String getUsername(){
return sUsername;
}
// Name
public void setName(String name){
sName = name;
}
public static String getName(){
return sName;
}
}
// set Variable to Class
UserClass user = new UserClass();
user.setUsername(rec.getString("Username"));
user.setName(rec.getString("Name"));
// get Username & Name from Class
UserClass user = new UserClass();
lblUsername.setText(user.getUsername());
lblName.setText(user.getName());
ในตัวอย่างนี้จะเลือกใช้ 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,
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');
INSERT INTO `member` VALUES (0002, 'surachai', 'surachai@2', '[email protected]', 'Surachai Sirisart');
INSERT INTO `member` VALUES (0003, 'adisorn', 'adisorn@3', '[email protected]', 'Adisorn Bonsong');
คำสั่งของ SQL ที่สามารถนำไปรันบน Query เพื่อสร้าง Table และ Rows ได้ทันที
Example ตัวอย่างการสร้างระบบ Login และการจัดเก็บค่าตัวแปรไปใช้ยัง Frame หรือ Form อื่น ๆ
UserClass.java เป็น Class สำหรับจัดเก็บตัวแปรของ Users
package com.java.myapp;
public class UserClass {
public static String sUsername;
public static String sName;
// Username
public void setUsername(String username){
sUsername = username;
}
public static String getUsername(){
return sUsername;
}
// Name
public void setName(String name){
sName = name;
}
public static String getName(){
return sName;
}
}
LoginDialog.java เป็น Dialog Login ถูกเรียกใช้โดย Frame หลักและจะแสดงหลังจากที่เปิด App ครั้งแรก
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);
}
}
MyForm.java เป็น Frame หลักของ Application
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;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class MyForm extends JFrame {
public static String userName;
public static String passWord;
static JLabel lblWelcome;
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);
// Button Open Form
JButton btnGoToNext = new JButton("Go to Next Windows");
btnGoToNext.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
MyForm2 form2 = new MyForm2();
form2.setVisible(true);
}
});
btnGoToNext.setBounds(260, 210, 172, 23);
getContentPane().add(btnGoToNext);
// When Frame Loaded
addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
OpenDialog();
}
});
}
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"));
// Passing Variable to Class
UserClass user = new UserClass();
user.setUsername(rec.getString("Username"));
user.setName(rec.getString("Name"));
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
}
}
}
MyForm2.java เป็น Frame สำหรับแสดง Form ที่สอง
package com.java.myapp;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.SwingConstants;
public class MyForm2 extends JFrame {
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MyForm2 frame = new MyForm2();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public MyForm2() {
super("ThaiCreate.Com Tutorial");
setSize(679, 385);
setLocation(500, 280);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
// Username
JLabel lblUsername = new JLabel("Username");
lblUsername.setHorizontalAlignment(SwingConstants.CENTER);
lblUsername.setFont(new Font("Tahoma", Font.PLAIN, 18));
lblUsername.setBounds(186, 108, 307, 14);
getContentPane().add(lblUsername);
// Name
JLabel lblName = new JLabel("Name");
lblName.setHorizontalAlignment(SwingConstants.CENTER);
lblName.setFont(new Font("Tahoma", Font.PLAIN, 18));
lblName.setBounds(186, 162, 307, 14);
getContentPane().add(lblName);
// get Username & Name from Class
UserClass user = new UserClass();
lblUsername.setText(user.getUsername());
lblName.setText(user.getName());
}
}
Output
แสดงหน้าจอ Dialog Popup ให้ Login ด้วย Username และ Password
ในกรณีที่ Login ถูกต้องจะแสดงหน้า Frame หลัก และแสดงค่าที่ดึงมาจาก Class ของ User ที่ได้ถูกจัดเก็บไว้
Frame อื่น ๆ ก็สามารถเรียกใช้งานได้เช่นเดียวกัน
อ่านเพิ่มเติม : How to use : Java GUI Login Username and Password via JDialog
อ่านเพิ่มเติม : How to use : Java GUI Authorized Menu Admin/User (Menu Level)
กรณีที่ใช้ร่วมกับ 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:13:11 /
2017-03-27 22:09:24 |
|
Download : |
No files |
|
Sponsored Links / Related |
|
|
|
|
|
|
|