티스토리 뷰
Java/for Class, Project
JAVA 자바 채팅 인터페이스, 로그인(Chat interface, login only, JFrame, WindowBuilder)
j0n9m1n1 2017. 10. 28. 03:24반응형
//textfield에서 입력한거 txLog로 가게 하는거 O, 엔터치면X(액션리스너인데 키리스너인가), 센드버튼 누르면O
//로그인 하게되면 그 아이디 리스트에 추가하고 로그아웃시 삭제하기 X
//로그인할때 id pw 검증하기 with login.txt file io O
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.awt.Container;
import java.awt.GridLayout;
import java.util.StringTokenizer;
import java.util.Vector;
public class chatNow extends JFrame {
//actionListener에서 사용해야해서...
JFrame internalframe;
JTextArea txLog = new JTextArea();
JTextField txID = new JTextField("");
JTextField txPW = new JTextField("");
MyActionListener myBTListener = new MyActionListener();
JTextField txChat = new JTextField("");
public chatNow(){
//WindowBuilder로 컴포넌트 생성
super("Main Frame");
setIconImage(Toolkit.getDefaultToolkit().getImage(chatNow.class.getResource("/assignment/5982-200.png")));
setTitle("chatNow");
setSize(500, 500);
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu mnNewMenu = new JMenu("Menu");
menuBar.add(mnNewMenu);
JMenuItem mntmLogin = new JMenuItem("Login");
mnNewMenu.add(mntmLogin);
JMenuItem mntmLogout = new JMenuItem("Logout");
mnNewMenu.add(mntmLogout);
getContentPane().setLayout(null);
JButton btnSend = new JButton("Send");
btnSend.setBounds(397, 408, 75, 23);
getContentPane().add(btnSend);
JLabel lblMessages = new JLabel("Messages");
lblMessages.setBounds(22, 14, 69, 15);
getContentPane().add(lblMessages);
JLabel lblMembers = new JLabel("Members");
lblMembers.setBounds(338, 14, 57, 15);
getContentPane().add(lblMembers);
JList list = new JList();
list.setBounds(338, 35, 128, 360);
getContentPane().add(list);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(22, 35, 299, 360);
getContentPane().add(scrollPane);
txLog.setEditable(false);
txLog.setLineWrap(true);
scrollPane.setViewportView(txLog);
JButton btnOK = new JButton("OK");
JButton btnCancel = new JButton("Cancel");
JLabel lbID = new JLabel("ID");
JLabel lbPW = new JLabel("PW");
internalframe = new JFrame("Login");
Container c= getContentPane();
txChat = new JTextField();
txChat.setBounds(22, 407, 363, 24);
getContentPane().add(txChat);
txChat.setColumns(10);
Container ic = internalframe.getContentPane();
ic.setLayout(new GridLayout(3,2));
ic.add(lbID);
ic.add(txID);
ic.add(lbPW);
ic.add(txPW);
ic.add(btnOK);
ic.add(btnCancel);
setVisible(true);
setResizable(false);
//이벤트가 발생할 버튼들 추가
mntmLogin.addActionListener(myBTListener);
mntmLogout.addActionListener(myBTListener);
btnOK.addActionListener(myBTListener);
btnCancel.addActionListener(myBTListener);
btnSend.addActionListener(myBTListener);
}
public static void main(String[] args) {
chatNow a = new chatNow();
}
class MyActionListener implements ActionListener{
public void actionPerformed(ActionEvent e){
//menuItem들 button으로 cast가 안된다는 에러가 나와서 검색해서 해결
String name = e.getActionCommand();
//사용자 ID, PW이 저장된 파일
File dataFile = new File("D:/login.txt");
String readData;
StringTokenizer st;
//ID, PW 빈칸검사를 위해 초기값설정
String loginID = "";
String loginPW = "";
loginID = txID.getText();
loginPW = txPW.getText();
if(name.equals("OK")) {
boolean check = false;
txID.setText("");
txPW.setText("");
if(loginID.equals("") || loginPW.equals("")) {//Login frame에서 txID 또는 txPW field가 빈칸이면
//ID, PW 확인하라는 MessageDialog 출력
JOptionPane.showMessageDialog(null,
"Check your ID, PW please.", "LoginError",
JOptionPane.ERROR_MESSAGE);
}
else {// ID, PW이 빈칸이 아니라면
try {
//객체생성
BufferedReader br = new BufferedReader(new FileReader(dataFile));
while((readData = br.readLine()) != null) {//라인이 null값이 아닐때까지
st = new StringTokenizer(readData, " ");
String txtID = st.nextToken();
String txtPW = st.nextToken();
if(loginID.equals(txtID) && loginPW.equals(txtPW)) {//입력한 ID txt파일 ID가 같고 입력한PW과 txt파일 PW이 같으면
check = true;//Login 검증 check값을 True로 바꾸고
//System.out.println(check);
break;//while break;
}
else {
check = false;// ID, PW이 같지 않다면
}
}
if(check == true) {// 만약 검증값이 ture이면
txLog.append("> "+ loginID + " is entered this room.\n");//출력
internalframe.setVisible(false); //Loginframe을 숨김
}
else {//검증값이 false면
txLog.append("> Your Access is denied.\n");//출력
JOptionPane.showMessageDialog(null,//ID, PW 확인하라는 MessageDialog 출력
"Check your ID, PW please.", "LoginError",
JOptionPane.ERROR_MESSAGE);
}
br.close();// BufferedReader 종료
}catch(IOException ie){//예외처리
System.out.println(ie.getMessage());
}
}
}
if(name.equals("Send")) {
if(loginID.equals("")) {
txLog.append("If you want to send a message, You need to login first.\n");
txChat.setText("");
}
else {
String text = txChat.getText();
txLog.append("> " + loginID + ": " + text + "\n");
txChat.setText("");
}
}
if(name.equals("Login")) {
if(internalframe.isVisible()==false){
internalframe.setBounds(150,100, 250,140);
internalframe.setVisible(true);
}
}
//else if
if (name.equals("Cancel")) {
internalframe.setVisible(false);
}
if (name.equals("Logout")) {
loginID = txID.getText();
if(loginID.equals("")) {
txLog.append("> You need to login.\n");
}
else {
txLog.append("> " + loginID + " is logout this room.\n");
internalframe.setVisible(false);
}
txID.setText("");
txPW.setText("");
}
}
}
}
FileIO BufferedReader, FileReader, readData boolean check 변수로 로그인 검증
menuItem Login을 클릭하면 internalframe으로 로그인폼 visible
'Java > for Class, Project' 카테고리의 다른 글
Java client, server connect example 클라이언트, 서버 연결 예제 only connect (0) | 2017.11.01 |
---|---|
Java TCP 네트워킹 (tcp networking) 노트 (이것이 자바다2) (0) | 2017.11.01 |
JAVA GUI 이벤트 처리 로그인 폼 (0) | 2017.10.23 |
Java Swing Frame Example 스윙 프레임 예제 (0) | 2017.10.11 |
자바 스레드 동기화 예제 Java Thread synchronize example (0) | 2017.09.29 |
댓글
티스토리 방명록
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
Blog is powered by
Tistory / Designed by
Tistory
Contact: j0n9m1n1@gmail.com
Contact: j0n9m1n1@gmail.com