자바 버튼으로 패널 전환[swing]
- 프로그래밍/JAVA
- 2019. 12. 31.
자바 버튼으로 패널 전환[swing]
이번에는 서로 다른 이미지가 배경으로 있는 패널(JPanel)을 전환해 보도록 하겠습니다.
- 패널, 버튼 만들기.
- 전체 코드.
- 결과.
이 글에는 커서 custom부분도 있으므로 아래 글을 참고해주세요.
(필요 없는 기능이지만 지우기 귀찮아서)
[프로그래밍/JAVA] - 자바 마우스 커서 제작, 변경[swing]
자바 마우스 커서 제작, 변경[swing]
자바 마우스 커서 제작, 변경[swing] 안녕하세요. 오늘은 자바 스윙에서 마우스 커서를 제가 원하는 이미지로 바꿔보겠습니다. 마우스 커서 이미지. 마우스 커서 custom 코드. 실행결과. 마우스 커서 이미지. 마우..
intunknown.tistory.com
패널 만들기
아래 글을 한번 보고 오세요.
자바 패널에 이미지 넣기
자바 패널에 이미지 넣기 안녕하세요. 오늘은 자바 패널(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를 안 해줘서 마우스가 안 변했네요.)