카드레이아웃의 기본은 아래 블로그에서 이해하자

https://m.blog.naver.com/PostView.nhn?blogId=shimchan2&logNo=70108791279&proxyReferer=https:%2F%2Fwww.google.com%2F

 

자바 GUI - CardLayout

import java.awt.*; import java.awt.event.*; public class CardLayoutTest {  /** * 카드레이아웃 이용...

blog.naver.com

 

이 글에서는 카드레이아웃과 그것을 사용한 리스너 컨트롤에 대해서 설명할 것이다.

 

기본 프레임 제작은 windowBuider를 사용하였으니 참고하자.

모든 파일은 따로 만들었다.

아래에 파일이 있으니 참고로 사용하자.

listenAdapter.java
0.00MB
CookieRun.java
0.00MB
IntroPanel.java
0.00MB
LoginPanel.java
0.00MB

 

 

리스너 어댑터 파일

리스너 어댑터는 필요없는 리스너들을 쓰지 않을 수 있도록 하는 중간 다리 역할이다.

키리스너 마우스리스너 액션리스너 인터페이스를 받아서 어댑터를 만들었다.

 

인트로 패널 파일

다른 파일로 만든 인트로 클래스이다.

이미지를 그리는 기능 밖에 없다.

 

로그인패널 파일

더보기를 눌러 로그인패널 코드 확인

더보기
package Test5;

import java.awt.AlphaComposite;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class LoginPanel extends JPanel {
	
	JLabel idLabel;
	JLabel pwLabel;
	
	JTextField idField;
	JPasswordField pwField;
	
	JButton loginBtn;
	JButton signBtn;
	
	ImageIcon loginIc = new ImageIcon("img/out/intro.png");
	private AlphaComposite alphaComposite;
	
	public LoginPanel(Object o) {
		idLabel = new JLabel("ID : ");
		Font f1 = new Font("Arial", Font.PLAIN, 20);
		idLabel.setFont(f1);
		idLabel.setBounds(550, 50, 100, 20);
		add(idLabel);
		
		pwLabel = new JLabel("PW : ");
		pwLabel.setFont(f1);
		pwLabel.setBounds(550, 80, 100, 20);
		add(pwLabel);
		
		idField = new JTextField();
		idField.setBounds(650, 50, 110, 20);
		add(idField);
		
		pwField = new JPasswordField();
		pwField.setBounds(650, 80, 110, 20);
		add(pwField);
		
		loginBtn = new JButton("login");
		loginBtn.setName("loginBtn");
		loginBtn.addMouseListener((MouseListener)o);
		loginBtn.setBounds(660, 110, 100, 20);
		add(loginBtn);
		
		signBtn = new JButton("sign");
		signBtn.setName("signBtn");
		signBtn.setBounds(550, 110, 100, 20);
		signBtn.addMouseListener((MouseListener)o);
		add(signBtn);
	}
	
	public String getId(){
		return idField.getText();
	}
	
	public String getPw(){
		return pwField.getText();
	}
	
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D)g;
		
		alphaComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float)100/255);
		g2.setComposite(alphaComposite);
		
		g.drawImage(loginIc.getImage(), -60, 0,/* this.getWidth(), this.getHeight(),*/ null);
		
		alphaComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float)255/255);
		g2.setComposite(alphaComposite);
		
	}
}

 

코드가 길어보이지만 크게 어려울 것은 없다.

라벨 2개

텍스트필드, 패스워드필드 하나씩

버튼 2개 선언

생성자에서 각 컴포넌트를 생성하고 위치를 정해주고 추가한다.

생성자가 Object 매개변수를 받는데,

메인 클래스가 리스너 역할을 하기 때문에 메인에서 자기자신을 로그인패널에 넣어주면

리스너를 이용할 수 있기 때문이다.

지금 이해가 바로 안되더라도 계속 진행해보자.

아이디와 패스워드를 리턴하는 메서드를 생성

 

 

메인 클래스 파일

메인클래스는 맨위에서 만들어둔 listenAdapter를 상속받는다.

그리고 전역공간에 각종 패널들의 레퍼런스만 선언해두고,

카드레이아웃 레퍼런스도 선언해두자.

 

 

초기화 메서드

초기화 메서드에서 카드레이아웃 레퍼런스(cl)에  카드레이아웃 객체를 연결하고

프레임의 레이아웃을 카드로 변경한다.

로그인패널에서 Object를 매개변수로 받았다는 점을 기억할 것이다.

위 사진을보면 LoginPanel생성자 뒤에 this를 넘겨준다.

this는 이 메인클래스 자체를 의미하며, 메인클래스는 리스너를 상속받고 있으니 리스너 역할을 하게된다.

인트로패널에 마우스리스너를 넣어주자. 마찬가지로 this를 넘겨준다.

카드레이아웃은 컨텐트페인에 여러개의 패널을 추가할 수 있다.

만들어둔 패널들을 모두 추가하자. 추가할 시 이름을 정해줘야한다.

마지막으로 리스너 내용들이다.

메인 클래스는 리스너를 상속받았기때문에 클래스 내부에 리스너들을 넣을 수 있다.

인트로 패널에서 사용될 기능이다.

화면을 누르면 로그인페이지로 넘어가도록 하였다.

 

+ Recent posts