본문 바로가기
[Java]

자바로 리듬게임 따라 만들기 3 (JButton)이용하기

by ho-bolt 2021. 9. 9.

 

기존의 배경화면을 멤버에 초기화 시켜주고 메뉴바를 만들어준 다음 JLabel에 넣어준다. 

여기서 JLabel은 문자열 및 이미지를 화면에 출력해주는 것이고 

ImageIcon은 이미지파일로부터 이미지를 읽는 것이다. 그래서 먼저 ImageIcon으로 이미지를 읽어오고 JLabel에 넣어 이미지를 화면에 출력해주는 것이다. 

 

 

그리고 그릴 수 있게 screenDraw함수에 printComponents(g)를 해준다. 이 함수는 해당 screenImages안에다가 

배경화면 이외에 JLabel과 같은 것을 JFrame안에 추가하면 그것을 그려주는 것이다. 즉 JFrame을 상속받는 Dynamic Beat 클래스안에다가 JLabel을 추가했기 때문에 menubar객체를 printComponent함수를 통해 배경화면 위에 그려주는 것이다. 

 

이제 메뉴바를 출력할건데 그전에 몇가지 설정을 해주어야 한다. 

기존에 있던 메뉴바를 안보이게 하기 위해 SetUndecorated(컨텐트가 표시되지 않음)을 true로 설정해준다. 

그 다음 setBackground를(0,0,0,)으로 해주어 위에서 printComponent를 했을 때 배경을 하얀색으로 바꿔준다. 

setLayout(null)을 넣어wnsek. setLayout(null)은 배치관리자가 없는 컨테이너로 Component의 절대크기과 위치를 정해주어야 한다. 

setBounds는 위치와 크기를 동시에 설정해주는 함수이다. 

 

여기까지 됐다면 배경화면 위에 메뉴바가 생길 것이다. 하지만 모든 게임에는 종료버튼이 있으므로 이제 그 메뉴바 의에 종료버튼을 만들 것이다. 사용할 그림을 image폴더에 먼저 넣어준다. 

 

마우스를 올렸을 때와 그냥 있을 때를 다르게 표현하기 위해 두 가지 이미지를 준비하고 JButton의 exitButton객체에 넣어준다. 

그리고 이러한 설정을 해준다. 

setBorderPainted(false)는 외곽선을 없애주고 

setContentAreaFilled(false)는 내용 영역 채우기를 안함 

setFocusPainter(false)는 JButton이 선택(focus)되었을 때 생기는 테두리를 사용하지 않겠다는 의미 

그러면 넣은 이미지만 딱 나오게 된다. 

이렇게 x자만 나오게 된다. 

 

그 다음 메뉴바를 누르면 위치를 이동시킬 수 있도록 

 

이는 현재 프로그램 안에서 마우스의 x,y좌표를 나타내준다. 

 

mousePressed는 마우스로 클릭 했을 때, 

mouseDragged는 마우스로 드래그 했을 때 그 순간순간의 좌표를 얻어와 자동으로 현재의 위치를 바꿔주는 것이다. 

 

addMouseListener:는 마우스의 입력상태를 나타내고 

addMouseMotionListener는 마우스의 움직임을 나타낸다. 

 

mouseListener에서 현재 이벤트가 발생하고있는 좌표를 e. getX(), e.getY()로 받아와 mouseX,Y에 넣어준다. 

 

mouseDragged도 현재 스크린의 x,y좌표를 얻어와 마우스가 클릭하고 있는 x,y좌표를 계산하며 현재 위치를 계속 업데이트 해준다. 그러면 메뉴바를 잡고 이동할 수 있게 된다. 

 

이제 그 종료버튼을 누르면 프로그램이 꺼지고 마우스를 올렸을 때 커서 모양이 바뀌는 것으로 바꾼다. 

buttonEnterMusic는 들어올 때 소리와 나갈 때 소리를 설정해 준다. 

buttonPressedMusci를 누르면 바로 꺼져 소리를 들을 수 없기 때문에 try-catch문 안에 Thread를 1초 정도 미루어 소리가 나고 1초 뒤에 꺼질 수 있게 해준다. 

728x90

댓글