티스토리 뷰
처음 실행 모습.
Change Panel 버튼을 클릭하면 다음 패널로 변경된다.
메인 프레임의 레이아웃을 CardLayout으로 설정한 후 두개의 패널을 생성하여 각각 Card로 등록한뒤 버튼을 클릭하면 서로 전환 되도록 구성.
메인 프레임
public class Frame extends JFrame{
private CardLayout cards = new CardLayout();
public Frame() {
setSize(330, 100);
getContentPane().setLayout(cards);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
getContentPane().add("One", new P_One(this));
getContentPane().add("Two", new P_Two(this));
setVisible(true);
}
public void changePanel() {
cards.next(this.getContentPane());
}
}
|
첫번째 패널
public class P_One extends JPanel {
private JLabel lblNewLabel;
private JButton btnNewButton;
private Frame F;
public P_One(Frame f) {
setBackground(Color.LIGHT_GRAY);
setSize(330, 80);
setLayout(null);
F = f;
lblNewLabel = new JLabel("Panel One");
lblNewLabel.setBounds(12, 10, 59, 15);
add(lblNewLabel);
btnNewButton = new JButton("Change Panel");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
F.changePanel();
}
});
btnNewButton.setBounds(12, 35, 113, 23);
add(btnNewButton);
setVisible(true);
}
}
|
두번째 패널
public class P_Two extends JPanel {
private JLabel lblNewLabel;
private JButton btnNewButton;
private Frame F;
public P_Two(Frame f) {
setBackground(Color.GRAY);
setSize(330, 80);
setLayout(null);
F = f;
lblNewLabel = new JLabel("Panel Two");
lblNewLabel.setBounds(12, 10, 61, 15);
add(lblNewLabel);
btnNewButton = new JButton("Change Panel");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
F.changePanel();
}
});
btnNewButton.setBounds(12, 35, 113, 23);
add(btnNewButton);
setVisible(true);
}
}
|
둘 이상의 패널을 각 Card로 등록한 뒤 원하는 패널을 부르는 방법
| cards.show(Container parent, String name); - parent : CardLayout이 있는 컨테이너. 여기선 메인프레임의 Pane -> F.getContentPane() - name : CardLayout에 패널 등록시 지정한 String 값. 여기선 One, Two 패널1과 패널2의 Button Action에 - F.getCardLayout().show(F.getContentPane(), "One"); - F.getCardLayout().show(F.getContentPane(), "Two"); getCardLayout()는 구현되 있지 않다. 구현시 메인 프레임에 public CardLayout getCardLayout() {
return cards;
}
|
댓글