자바 버튼으로 패널 전환[swing]

자바 버튼으로 패널 전환[swing]

안녕하세요.

이번에는 서로 다른 이미지가 배경으로 있는 패널(JPanel)을 전환해 보도록 하겠습니다.

  • 패널, 버튼 만들기.
  • 전체 코드.
  • 결과.

이 글에는 커서 custom부분도 있으므로 아래 글을 참고해주세요.

(필요 없는 기능이지만 지우기 귀찮아서)

[프로그래밍/JAVA] - 자바 마우스 커서 제작, 변경[swing]

 

자바 마우스 커서 제작, 변경[swing]

자바 마우스 커서 제작, 변경[swing] 안녕하세요. 오늘은 자바 스윙에서 마우스 커서를 제가 원하는 이미지로 바꿔보겠습니다. 마우스 커서 이미지. 마우스 커서 custom 코드. 실행결과. 마우스 커서 이미지. 마우..

intunknown.tistory.com

패널 만들기

아래 글을 한번 보고 오세요.

[프로그래밍/JAVA] - 자바 패널에 이미지 넣기

 

자바 패널에 이미지 넣기

자바 패널에 이미지 넣기 안녕하세요. 오늘은 자바 패널(Panel)에 이미지를 넣어보겠습니다. 패널 만들기 넣을 이미지 준비 코드. 실행 결과 1. java swing 패널 만들기. 이 부분은 아래 글을 먼저 보시면 도움이..

intunknown.tistory.com

버튼과 패널.

먼저 버튼과 패널을 만들어줍니다.

이렇게 만들기만 하면 프레임에 반영되지 않으므로 해야 될 것이 하나 더 있습니다.

/*버튼*/
static JButton b1=new JButton("버튼1");
/*패널1*/
static JPanel page1=new JPanel() {
	/*이미지*/
	Image background=new ImageIcon(Main.class.getResource("../image/background1.png")).getImage();
	public void paint(Graphics g) {//그리는 함수
			g.drawImage(background, 0, 0, null);//background를 그려줌		
	}
};
/*패널2*/
static JPanel page2=new JPanel() {
	/*이미지*/
	Image background=new ImageIcon(Main.class.getResource("../image/background2.png")).getImage();
	public void paint(Graphics g) {//그리는 함수
			g.drawImage(background, 0, 0, null);//background를 그려줌		
	}
};

바로 프레임에 패널을 추가하는 것입니다.

저는 그냥 함수로 만들어서 생성자에서 불렀습니다.

public void setpanel() {
	/*위치 설정*/
	b1.setBounds(0, 0, 100, 100);//버튼1의 위치 설정
	page1.setBounds(0, 0, 400, 400);//패널1의 위치 설정
	page2.setBounds(0, 0, 400, 400);//패널2의 위치 설정
	/*레이아웃 지정*/
	page2.setLayout(null);//레이아웃 설정
	page1.setLayout(null);//레이아웃 설정
	/*visible*/
	page2.setVisible(false);//창이 보이지 않게
	/*패널이나 프레임에 추가*/
	add(page1);//프레임에 패널을 추가
	add(page2);//프레임에 패널을 추가
	page1.add(b1);//패널1에 버튼을 추가
}

버튼 눌렀을 때-마우스 이벤트.

버튼을 눌렀을 때 패널이 바뀌게 해야 돼서 마우스 이벤트를 만들어볼 겁니다.

역시 이것도 그냥 함수로 만들어서 생성자에서 불렀습니다.

/*마우스 이벤트*/
public void cg(){
	b1.addMouseListener(new MouseAdapter() { // 마우스 이벤트 
		@Override public void mouseEntered(MouseEvent e) { // 마우스 들어왔을때 
		} 
		@Override public void mouseExited(MouseEvent e) { // 마우스 나왔을때 	
		}
		@Override public void mousePressed(MouseEvent e) { // 클릭했을때 
			page1.setVisible(false);//창이 보이게
			page2.setVisible(true);//창이 보이게
			System.out.println("눌렀엉");//눌렸는지 확인하려고 넣음.
		} 
	});
}

위에서 버튼을 패널1(page1)에 넣어서 버튼을 누르면 패널1은 보이지 않게 만들고 visible(false)로 되어있던 패널2를 보이게 만들어줍니다.

전체 코드

그래서 위의 코드들의 전체 코드는 아래와 같습니다.

package test01;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main extends JFrame{
	/*버튼*/
	static JButton b1=new JButton("버튼1");
	/*패널1*/
	static JPanel page1=new JPanel() {
		/*이미지*/
		Image background=new ImageIcon(Main.class.getResource("../image/background1.png")).getImage();
		public void paint(Graphics g) {//그리는 함수
				g.drawImage(background, 0, 0, null);//background를 그려줌		
		}
	};
	/*패널2*/
	static JPanel page2=new JPanel() {
		/*이미지*/
		Image background=new ImageIcon(Main.class.getResource("../image/background2.png")).getImage();
		public void paint(Graphics g) {//그리는 함수
				g.drawImage(background, 0, 0, null);//background를 그려줌		
		}
	};
	public Main() {
		homeframe();//homeframe함수를 실행
		setpanel();//setpanel함수를 실행
		customcursor();//customcursor함수를 실행
		cg();//cg함수를 실행
	}
	/*커서설정*/
	public void customcursor(){
		/*커서만드는중*/
		Toolkit tk = Toolkit.getDefaultToolkit();
		Image cursorimage=tk.getImage("src/image/exitButtonP.png");
		Point point=new Point(20,20);
		Cursor cursor=tk.createCustomCursor(cursorimage, point, "haha");
		page1.setCursor(cursor); 
	}
	/*프레임 설정*/
	public void homeframe() {
		setTitle("1");//타이틀
		setSize(400,400);//프레임의 크기
		setResizable(false);//창의 크기를 변경하지 못하게
		setLocationRelativeTo(null);//창이 가운데 나오게
		setLayout(null);//레이아웃 설정
		setVisible(true);//창이 보이게	
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//JFrame이 정상적으로 종료되게
	}
	/*패널 관련 설정*/
	public void setpanel() {
		/*위치 설정*/
		b1.setBounds(0, 0, 100, 100);//버튼1의 위치 설정
		page1.setBounds(0, 0, 400, 400);//패널1의 위치 설정
		page2.setBounds(0, 0, 400, 400);//패널2의 위치 설정
		/*레이아웃 지정*/
		page2.setLayout(null);//레이아웃 설정
		page1.setLayout(null);//레이아웃 설정
		/*visible*/
		page2.setVisible(false);//창이 보이지 않게
		/*패널이나 프레임에 추가*/
		add(page1);//프레임에 패널을 추가
		add(page2);//프레임에 패널을 추가
		page1.add(b1);//패널1에 버튼을 추가
	}
	/*마우스 이벤트*/
	public void cg(){
		b1.addMouseListener(new MouseAdapter() { // 마우스 이벤트 
			@Override public void mouseEntered(MouseEvent e) { // 마우스 들어왔을때 
			} 
			@Override public void mouseExited(MouseEvent e) { // 마우스 나왔을때 	
			}
			@Override public void mousePressed(MouseEvent e) { // 클릭했을때 
				page1.setVisible(false);//창이 보이게
				page2.setVisible(true);//창이 보이게
				System.out.println("눌렀엉");//눌렸는지 확인하려고 넣음.
			} 
		});
	}
	/*메인함수*/
	public static void main(String[] args){
		new Main(); //실행하면 생성자가 실행됨.
	}
}

패널전환 실행결과

위의 코드를 실행하면 다음과 같은 결과가 나타납니다.

먼저 첫 번째 패널입니다.(버튼 못생김 ㅇㅅㅇ...)

버튼1을 눌러보겠습니다.

버튼1을 눌렀을 때입니다.

패널이 변경된 것을 확인할 수 있습니다.

(패널2에는 setCursor를 안 해줘서 마우스가 안 변했네요.)

Designed by JB FACTORY