본문 바로가기

개인프로젝트/리듬게임만들기

[내가 만든 프로젝트 코드 분석 | 리듬게임 만들기] 4. 메뉴 바 구현

포토샵을 사용해서 메뉴바를 해상도에 맞게 만들어줍니다.

메뉴바에 종료버튼을 위치하고 종료기능을 구현합니다.

메뉴바를 클릭하여 이동시킬 수 있는 드래그 기능을 구현합니다.

버튼 클릭시 버튼효과음을 적용합니다.

public class DynamicBeat extends JFrame {
	
	private Image screenImage;
	private Graphics screenGraphic;
	
	private ImageIcon exitButtonEnteredImage = new ImageIcon(Main.class.getResource("../images/exitButtonEntered.png")); // Entered 변수
	private ImageIcon exitButtonBasicImage = new ImageIcon(Main.class.getResource("../images/exitButtonBasic.png")); // Basic 변수
	
	private Image introBackground = new ImageIcon(Main.class.getResource("../images/introBackground(Title).jpg")).getImage();
    private JLabel menuBar = new JLabel(new ImageIcon(Main.class.getResource("../images/menuBar.png"))); 
// 메뉴바 객체안에 메뉴바이미지 생성
	private JButton exitButton = new JButton(exitButtonBasicImage);
	// 종료버튼이미지 생성 
	private int mouseX, mouseY; // 프로그램 안에서 마우스 좌표
	
	public DynamicBeat() {
		setUndecorated(true); // 운영체제 메뉴바 삭제
		setTitle("Dynamic Beat");
		setSize(Main.SCREEN_WHIDTH, Main.SCREEN_HEIGHT);
		setResizable(false);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		setBackground(new Color(0, 0, 0, 0)); // 
		setLayout(null);
	exitButton.setBounds(1245, 0, 30, 30); // JButton 커스텀 설정
		exitButton.setBorderPainted(false); // 기본버튼테두리 삭제
		exitButton.setContentAreaFilled(false); // 기본버튼내용 삭제
		exitButton.setFocusPainted(false); // 기본포커스 삭제
		exitButton.addMouseListener(new MouseAdapter() {
		// 마우스가 이미지에 올라왔을때 이벤트설정
			@Override
			public void mouseEntered(MouseEvent e) {
				exitButton.setIcon(exitButtonEnteredImage);// 버튼이미지 변경
				exitButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
				// 마우스 모양 변경
				Music buttinEnteredMusic = new Music("buttonEnteredMusic.mp3", false); // 버튼 효과음 적용
				buttinEnteredMusic.start();
			}
			@Override
			public void mouseExited(MouseEvent e) {
				exitButton.setIcon(exitButtonBasicImage); // 버튼이미지 복구
				exitButton.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
				// 마우스 모양 복구
			}
			@Override
			public void mousePressed(MouseEvent e) {
				Music buttinEnteredMusic = new Music("buttonPressedMusic.mp3", false); // 버튼 효과음 적용
				buttinEnteredMusic.start();
				try {
					Thread.sleep(1000); // 효과음 1초 이후에 쓰레드 종료
				} catch(InterruptedException ex) {
						ex.printStackTrace();
				}
				System.exit(0);
			}
		});
		add(exitButton);
Music introMusic = new Music("introMusic.mp3", true);
		introMusic.start();
	}
	
	public void paint(Graphics g) {
		screenImage = createImage(Main.SCREEN_WHIDTH, Main.SCREEN_HEIGHT);
		screenGraphic = screenImage.getGraphics();
		screenDraw(screenGraphic);
		g.drawImage(screenImage, 0, 0, null);
	}
	
	public void screenDraw(Graphics g) {
		g.drawImage(introBackground, 0, 0, null);
		paintComponents(g); // 화면에 고정된 이미지를 출력하기 위해 사용
		this.repaint();
	}
}

DynamicBeat클래스