아래의 소스코드는 Swing으로 만드는 간단한 로그인창의 예제다.

 

 컴포넌트를 JFrame에 붙이는 작업은 이제 수월하다. 반복작업이기 때문에 컴포넌트들의 위치만 충돌하지 않도록 잘 잡아주면 될 것이다. 매번 위치잡는 것이 귀찮으니까 나름의 기준을 정할 필요가 있다. 로그인 창 같은 것은 거의 정해져 있는 형식이 된다. 물론 최근엔 거의 웹사이트에서 사용하긴 하는데... 그것도 자동로그인이 되놔서 SNS에 한번 로그인 하면 끓임없이 푸시가 들어온다.

 

 데스크탑 애플리케이션도 로그인창이 있다. 스마트폰 앱도 마찬가지 일테지만 UI는 스마트폰 쪽이 훨씬 광범위하게 발전하는 것 같다. 불과 얼마전까지도 데스크탑이 주류였다고 생각한다. 컴퓨팅의 세계는 정말이지 빛의 속도로 진화하고 있다. 왜 빛의 속도냐면 386 PC가 가정집에 들어왔던게 얼마전 같다는 생각이 든다. 과거를 돌아보는 머리속에선 386 PC가 재현되고 있는데 실제 눈앞의 현실은 스마트폰으로 유튜브 라이브 방송을 보고 있다.

 

부트스트랩이란 것을 쓰면 디자인의 디짜도 모르는 사람도 훌륭한 UI 디자이너가 되는 시대에 Swing 로그인 창이나 만들고 있다면 좀 뒤떨어진 것 같다는 생각도 들지만 학습이 목적이라면 그렇게까지 나쁘지 않다. 또 로컬이나 개인 프로그램을 개발하는데 간단한 보안정도 걸어줄수 있다면 좋다. 프로그래밍이란게 항상 대중에게 팔기위해서 만드는 것은 아니다. 사람의 업무를 자동화하거나 자동으로 정보를 수집하는 봇을 만들 수도 있다. 이럴때 남들이 내 프로그래밍을 건들지 못하게 만드는 일은 필요하다. 일단 로그인창을 걸어놓으면 일반인은 접근하지 못할 것이다. 개인용은 그걸로 충분하다.

 

어떻게 배치할지는 사용자의 취향에 달렸지만 보통의 로그인 창은 생각하는 그대로다. 유저아이디(이름),유저패스워드, 전송버튼. 웹이라면 여기에 아이디가 없으면 가입하시오, 뭐 그런 내용들이 나올 것이다. 아래 코드를 보면 쉽게 알 수 있다. 줄을 띄워놓은 것은 하나의 컴포넌트를 구분하기 위해서다.

 

JPasswordField 는 텍스트필드와 다르게 입력내용이 표시되지 않는다. 요즘 패스워드창의 특징이다.

 

액션리스너에는 다른 내용이 들어가야 할 것이다. 프로그램에 등록된 사용자를 확인하고, 보통 요즘엔 DB를 쓰는데 사용자가 많지 않으면 DB를 사용하지 않아도 된다. 유저테이블에 들어가는 데이터가 관리인 혼자인데 DB는 설계안해도 된다. (어디까지나 개인 프로그램의 경우)

 

나머지 부분은 계속 반복된다. Swing 자체가 컴포넌트 조립방식으로 윈도우를 만들기 때문에 튜토리얼을 하다보면 다소 지루하다. 각 컴포넌트의 위치와 관계에 대해서 생각하면서 코드를 작성하면 좋다.

 

import java.awt.Font;
import java.awt.event.*;
import javax.swing.*;

public class SwingEX6 extends JFrame{
	Font f1;
	
	SwingEX6(){
		
		f1 = new Font("바탕",Font.PLAIN,15);
		
		JLabel lb1 = new JLabel();            
		lb1.setBounds(20,200, 300,50);  
		lb1.setFont(f1);
   
		JLabel lb2=new JLabel("Username:");    
		lb2.setBounds(20,50, 80,30);
		lb2.setFont(f1);
		
		JTextField tf1 = new JTextField();  
		tf1.setBounds(100,50, 100,30);
		tf1.setFont(f1);
		
		JLabel lb3=new JLabel("Password:");    
		lb3.setBounds(20,100, 80,30);
		lb3.setFont(f1);
		
		JPasswordField pw1 = new JPasswordField();   
		pw1.setBounds(100,100,100,30);
		pw1.setFont(f1);
		
		JButton bt1 = new JButton("Login");    
		bt1.setBounds(100,150, 80,30);    
		bt1.setFont(f1);
		
		bt1.addActionListener(new ActionListener() {  
			public void actionPerformed(ActionEvent e) {       
				String data = "Username " + tf1.getText();  
				data += ", Password: "   
						+ new String(pw1.getPassword());   
				lb1.setText(data);          
             }  
          });   

		add(lb1);add(pw1);
		add(lb2);add(tf1);
		add(lb3);add(bt1);
		setTitle("Password EX");
		setSize(320,320);
		setLayout(null);
		setVisible(true);
	}
	public static void main(String[] args) {
		new SwingEX6();
	}
}

 

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band