자바 버튼으로 패널 전환[swing]
- 프로그래밍/JAVA
- 2019. 12. 31.
250x250
자바 버튼으로 패널 전환[swing]
안녕하세요.
이번에는 서로 다른 이미지가 배경으로 있는 패널(JPanel)을 전환해 보도록 하겠습니다.
- 패널, 버튼 만들기.
- 전체 코드.
- 결과.
이 글에는 커서 custom부분도 있으므로 아래 글을 참고해주세요.
(필요 없는 기능이지만 지우기 귀찮아서)
[프로그래밍/JAVA] - 자바 마우스 커서 제작, 변경[swing]
패널 만들기
아래 글을 한번 보고 오세요.
버튼과 패널.
먼저 버튼과 패널을 만들어줍니다.
이렇게 만들기만 하면 프레임에 반영되지 않으므로 해야 될 것이 하나 더 있습니다.
/*버튼*/
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를 안 해줘서 마우스가 안 변했네요.)