Java - Login

2020. 7. 16. 23:09Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
import java.awt.BorderLayout;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
 
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Vector;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.JTable;
import java.awt.Color;
import javax.swing.JScrollBar;
 
public class Ex extends JFrame {
    JTextField tfip,tfname;
    JPasswordField pfpass;
    private JTextField tfUserName;
    private JTextField tfNum;
    private JTextField tfName;
    private JTextField tfID;
    private JTextField tfpassword;
    private JTextField tfJumin;
    private JTable table;
    private JTable table_1;
    
    public Ex() {
        showFrame();
    }
 
    private void showFrame() {
        setTitle("고객관리 프로그램");
        setBounds(600400700380);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(null);
        
        JLabel lbIp = new JLabel("IP");
        lbIp.setHorizontalAlignment(SwingConstants.RIGHT);
        lbIp.setBounds(44172015);
        getContentPane().add(lbIp);
        
        tfip = new JTextField("localhost");
        tfip.setEditable(false);
        tfip.setBounds(681410421);
        getContentPane().add(tfip);
        tfip.setColumns(10);
        
        JLabel lblName = new JLabel("Username");
        lblName.setHorizontalAlignment(SwingConstants.RIGHT);
        lblName.setBounds(190176315);
        getContentPane().add(lblName);
        
        tfUserName = new JTextField("admin");
        tfUserName.setEditable(false);
        tfUserName.setBounds(260148221);
        getContentPane().add(tfUserName);
        tfUserName.setColumns(10);
        
        JLabel lblPass = new JLabel("Password");
        lblPass.setHorizontalAlignment(SwingConstants.RIGHT);
        lblPass.setBounds(344176915);
        getContentPane().add(lblPass);
        
        pfpass = new JPasswordField();
        pfpass.setBounds(426148221);
        getContentPane().add(pfpass);
        
        JButton btnLogin = new JButton("Login");
        btnLogin.setBounds(536139723);
        getContentPane().add(btnLogin);
        
        JLabel lblNum = new JLabel("번 호");
        lblNum.setHorizontalAlignment(SwingConstants.RIGHT);
        lblNum.setBounds(12735015);
        getContentPane().add(lblNum);
        
        JLabel lblName2 = new JLabel("이 름");
        lblName2.setHorizontalAlignment(SwingConstants.RIGHT);
        lblName2.setBounds(121105015);
        getContentPane().add(lblName2);
        
        JLabel lblAge = new JLabel("나 이");
        lblAge.setHorizontalAlignment(SwingConstants.RIGHT);
        lblAge.setBounds(121465015);
        getContentPane().add(lblAge);
        
        JLabel lblMail = new JLabel("E-Mail");
        lblMail.setHorizontalAlignment(SwingConstants.RIGHT);
        lblMail.setBounds(121825015);
        getContentPane().add(lblMail);
        
        JLabel lblJumin = new JLabel("주민번호");
        lblJumin.setHorizontalAlignment(SwingConstants.RIGHT);
        lblJumin.setBounds(122195215);
        getContentPane().add(lblJumin);
        
        tfNum = new JTextField();
        tfNum.setEditable(false);
        tfNum.setBounds(75709721);
        getContentPane().add(tfNum);
        tfNum.setColumns(10);
        
        tfName = new JTextField();
        tfName.setBounds(751109721);
        getContentPane().add(tfName);
        tfName.setColumns(10);
        
        tfID = new JTextField();
        tfID.setBounds(751439721);
        getContentPane().add(tfID);
        tfID.setColumns(10);
        
        tfpassword = new JTextField();
        tfpassword.setBounds(751799721);
        getContentPane().add(tfpassword);
        tfpassword.setColumns(10);
        
        tfJumin = new JTextField();
        tfJumin.setBounds(752169721);
        getContentPane().add(tfJumin);
        tfJumin.setColumns(10);
        
        JButton btnAdd = new JButton("회원추가");
        btnAdd.setBounds(2052949723);
        getContentPane().add(btnAdd);
        
        JButton btnList = new JButton("회원목록");
        btnList.setBounds(3142949723);
        getContentPane().add(btnList);
        
        JButton btnDelete = new JButton("회원삭제");
        btnDelete.setBounds(4232949723);
        getContentPane().add(btnDelete);
        
//        JPanel panel = new JPanel();
//        panel.setBounds(190, 57, 474, 227);
//        getContentPane().add(panel);
        
        JScrollPane scrollPane = new JScrollPane();//패널의 역할도 하기 때문에 패널에 add하지 않아도 된다!!
        scrollPane.setBounds(19057474227);
        getContentPane().add(scrollPane);
        
        table = new JTable();
        scrollPane.setViewportView(table);
        
        
        Vector<String> columnNames=new Vector<String>(
                Arrays.asList("번호","이름","나이","E-Mail","주민번호")
                );
        
        DefaultTableModel model=new DefaultTableModel(columnNames, 0);
        
        table.setModel(model);
        customerDAO dao=customerDAO.getInstance();
        
        btnLogin.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                String dbip=tfip.getText();
                String user=tfUserName.getText();
                String pass=new String(pfpass.getPassword());
                 if(user.length()==0) {
                    JOptionPane.showMessageDialog(null"ID을 입력하세요","오류",JOptionPane.ERROR_MESSAGE);
                    tfUserName.requestFocus();
                    return;
                }else if(pass.length()==0) {
                    JOptionPane.showMessageDialog(null"비밀번호를 입력하세요","오류",JOptionPane.ERROR_MESSAGE);
                    pfpass.requestFocus();
                    return;
                }
                 
                boolean result;
                try {
                    result = dao.login(dbip,user,pass);
                    if(result) {
                        JOptionPane.showMessageDialog(null"로그인 성공");
                        tfUserName.setEditable(false);
                        pfpass.setEditable(false);
                        btnLogin.setText("Logout");
                        return;
                    }
                }
                 catch (LoginFailException e1) {
                     JOptionPane.showMessageDialog(null"로그인 실패","오류",JOptionPane.ERROR_MESSAGE);
                    e1.printStackTrace();
                }
            }
        });
        
        btnAdd.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                 if(tfName.getText().length()==0) {
                    JOptionPane.showMessageDialog(null"이름을 입력하세요.");
                    tfName.requestFocus();
                    return;
                }else if(tfID.getText().length()==0) {
                    JOptionPane.showMessageDialog(null"나이를 입력하세요.");
                    tfID.requestFocus();
                    return;
                }else if(tfpassword.getText().length()==0) {
                    JOptionPane.showMessageDialog(null"E-mail을 입력하세요");
                     tfpassword.requestFocus();
                     return;
                }else if(tfJumin.getText().length()==0) {
                    JOptionPane.showMessageDialog(null"주민번호를 입력하세요");
                    tfJumin.requestFocus();
                    return;
                }
                 
                 dao.Insert();
            }
        });
        
        
        setVisible(true);
    }
    
    
 
    public static void main(String[] args) {
        new Ex();
    }
}
class LoginFailException extends Exception{
    public LoginFailException(String message) {
        super(message);
    }
}
 
cs

 

Absolute Layout으로 만들어 보았는데 쉽긴 쉽지만 뭔가 내 마음처럼 깔끔하게 딱딱 떨어지게 이쁘게는 안된 거 같다.

DB와 연결하여 로그인 기능과 회원추가 기능, 그리고 login 버튼을 눌렀을 경우의 경고창 , 회원 추가 버튼을 눌렀을 경우의 경고창을 넣어보았고, Login 이 완료되었을 경우 패스워드 창도 Editable을 false로 변경해줘서 입력이 불가능하게 만들어준 후, Login을 Logout으로 글자를 바꾸어 보았다. GUI 부분은 눈으로 바로바로 보이기도 하고 재미있는 기능이 많아서 재미있다. JOptionPane.showMessageDialog(null"로그인 실패","오류",JOptionPane.ERROR_MESSAGE);

이구 문을 배워보았는데 오류라고 확실히 구분이 가는 빨간 창이 떠서 좋았다. DAO, DTO를 사용하는 거는 확실히 익숙해지니 큰 어려움 없이 금방 적용이 가능해서 헤매지는 않았다.