자바 스윙 패널을 통한 화면전환

학원에서 일주일 프로젝트를 하게되었을때 화면전환에 대해 많은 고민을 한적이 있다.

그때 썼던 코드는 dispose()를 통해 화면을 닫고 새로여는 방식이였는데
지금 개인 프로젝트를 하면서 더 좋은 것을 알게 되었다.
그것은 바로 panel을 통한 화면전환 방식 이다.
바로 코드부터 보여드릴려고 한다.

public class ControlTower extends JFrame{
	public String panelName = null;

	//화면들
	FirstUI firstUi;
	TicketingUI ticketUi;

	ControlTower(){
		list = admini.selectMovie();
		thList = thAdmini.selectTheater();

	}

	public void changePanel(String panelName) {
		if(panelName == "firstUi") {
			getContentPane().removeAll();
			getContentPane().add(firstUi);
			revalidate();
			repaint();
		}else if(panelName == "ticketUi"){
			getContentPane().removeAll();
			getContentPane().add(ticketUi);
			revalidate();
			repaint();
		}
	}
}

하나의 컨트롤 타워를 만들고 컨트롤타워에서 패널들을 만들어준다.

new는 main에서 생성을해서 관리하도록하고 컨트롤타워는 모든 클래스에서 사용할 수있도록 메인에서 뿌려준다.

다른 클래스에서 사용할땐 panelName = firstUi 이런식으로 바꿔주게 되면 화면이 전환되게 되는 것이다.

그럼 바로 메인코드로 가보자.

public static void main(String[] args) {
		ControlTower ct = new ControlTower();
		ct.firstUi = new FirstUI(ct);
		ct.ticketUi = new TicketingUI(ct);

		ct.add(ct.ticketUi);

		ct.setTitle("영화예매");
		ct.setSize(1200, 900);
		ct.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		ct.setVisible(true);
		ct.setLocationRelativeTo(null);
	}

메인에서는 new를 통해 주소값을 생성하고 컨트롤타워(패널변경)의 권한을 넘겨준다.

ct.add는 첫화면에서 보여줄것을 넣는것이다.

조금 더 보충설명을 위해 다음코드도 적어본다.

class FirstUI extends JPanel implements ActionListener{
	ControlTower ct;
	JButton ticketing;

	FirstUI(ControlTower ct){
		this.ct = ct;
		setLayout(null);
		JLabel ad = new JLabel(new ImageIcon("./images/ad.jpg")); //광고
		ad.setBounds(50, 30, 1100, 400);

		ticketing = new JButton("예매하기");
		ticketing.setBounds(50, 450, 550, 350);

		JButton checking = new JButton();
		checking.setBounds(600, 450, 550, 350);

		add(ad);
		add(checking);
		add(ticketing);

		ticketing.addActionListener(this);

	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource().equals(ticketing)) {
			ct.changePanel("ticketUi");
		}
	}
}

액션리스너를 통해 actionPerformed에 들어오게 되면 e.getSource로 어떤 액션에서 받아왔는지 확인하고

그확인한것이 equal을 통해 ticketing과 비교해서 맞으면 if문 안으로 들어와 ct(컨트롤타워)에 있는 panelName의 이름을 바꿔주는 것이다.

참고로 changePanel은 패널을 바꾸기위한 내가 만든 메서드이다.

Categories:

Updated:

Leave a comment