CardLayout 클래스는 카드 형태로 레이아웃을 모아놓고 원하는 것을 꺼내 사용할 수 있도록 도와준다.
import java.awt.*;
import javax.swing.*;
public class ControllerPanel extends JPanel{
public CardLayout card = new CardLayout(); //모아놓고 원하는 것을 찾아줄 수 있도록 하는 레이아웃
public HomeForm hf;
public DetailForm df;
public MusicFindForm mf = new MusicFindForm();
public ChatForm cf = new ChatForm();
public NewsForm nf = new NewsForm();
public ControllerPanel() {
hf = new HomeForm(this);
df = new DetailForm(this);
setLayout(card);
//add가 가장 위에 있는게 먼저 뜬다.
add("HF", hf);
add("DF",df);
add("MF",mf);
add("CF",cf);
add("NF",nf);
}
}
Main에서는 ActionListener 인터페이스와 JFrame을 상속받아 화면 전환을 구현한다.
ActionListener 인터페이스를 상속받으면 각 버튼을 클릭했을 때 어떤 반응을 보일 지 구현할 수 있다.
package doodoo.main;
import doodoo.client.*;
import doodoo.common.Function;
import doodoo.data.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
public class NetworkMain extends JFrame implements ActionListener{
ControllerPanel cp = new ControllerPanel();
MenuForm menu = new MenuForm();
WaitForm wr = new WaitForm();
LoginForm lf = new LoginForm();
public HomeForm hf;
public DetailForm df;
public MovieFindForm mf = new MovieFindForm();
public ChatForm cf = new ChatForm();
public NewsForm nf = new NewsForm();
public NetworkMain() {
setTitle("무비챗");
setLayout(null); //사용자 정의 = 직접배치
cp.setBounds(10, 15, 850, 850);
add(cp);
wr.setBounds(980, 15, 250, 700);
add(wr);
setSize(1250, 900);
setDefaultCloseOperation(EXIT_ON_CLOSE);
//버튼을 누르면 어떻게 해야 한다=이벤트 등록
menu.chatBtn.addActionListener(this);
menu.exitBtn.addActionListener(this);
menu.homeBtn.addActionListener(this);
menu.newsBtn.addActionListener(this);
menu.movieBtn.addActionListener(this);
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel");
} catch (Exception ex) {}
new NetworkMain();
}
//버튼 클릭시 처리해 주는 부분 -> 클릭시 자동 시스템(JVM)에 의해 자동 호출된다.
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == menu.chatBtn) {
cp.card.show(cp, "CF");
} else if (e.getSource() == menu.exitBtn) {
try {
out.write((Function.END + "|\n").getBytes());
} catch (Exception ex) {}
} else if (e.getSource() == menu.movieBtn) {
cp.card.show(cp, "MF");
} else if (e.getSource() == menu.homeBtn) {
cp.card.show(cp, "HF");
} else if (e.getSource() == menu.newsBtn) {
cp.card.show(cp, "NF");
}
}