Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 검색어최적화
- 리스트
- BFS
- Java
- 스프링
- 연결리스트구현
- jnut
- SWEA
- 고쳐야해!
- BOJ17070
- 타입제한
- 파이프 옮기기
- 인공지능
- 백준
- spa 라우팅
- 주피터
- 머신러닝
- 타입변수
- 파이썬
- 서버사이드랜더링
- let과var차이
- 리스트구현
- 알고리즘
- BOJ
- 리눅스
- 드래그방지
- 텐서플로우
- 딥러닝
- SPA
- Spring
Archives
- Today
- Total
林's
[JAVA] Swing의 CardLayout 사용법 본문
JAVA Swing Card Layout(카드 레이아웃)
자바 스윙에서 간혹 쓰는 레이아웃인데. 도박게임의 패를 만들거나 이미지를 클릭하여 한 페이지에 번갈아가며 출력하고 싶을 때 사용하면 좋다. 이 예제는 다음과 같은 흐름을 따라 제작하였다.
- CardLayout 객체 생성
- SetLayout 을 통해 레이아웃 지정
- 이벤트 처리 함수에서 show함수 호출하기.
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class Deck extends JFrame { // 레이아웃 매니저와 패널, 패널 안에 들어갈 라벨을 초기화합니다. CardLayout cardLayout = new CardLayout(); JPanel[] panel = new JPanel[10]; JLabel[] label = new JLabel[10]; // 프레임 생성자 public Deck() { makeFrame(); makeCards(this); setVisible(true); } // 카드 레이아웃이 적용된 프레임 생성자 private void makeFrame() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("카드 레이아웃 실습"); setSize(100,100); setLayout(cardLayout); // 0~9까지의 입력을 받아 이름에 맞는 카드를 찾아 출력해주는 키 리스너 addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) { char input = e.getKeyChar(); if ( input >= '0' && input <= '9' ) { cardLayout.show(getContentPane(), ""+input); } } public void keyReleased(KeyEvent e) {} public void keyPressed(KeyEvent e) {} }); } // 카드레이아웃이 적용된 프레임을 받아와 패널을 추가한다. private void makeCards(JFrame frame) { // 패널 만들기 for (int i = 0; i < 10; i++) { // 색깔 랜덤 생성 int r = (int)(Math.random()*255); int g = (int)(Math.random()*255); int b = (int)(Math.random()*255); Color color = new Color(r, g, b); // 패널에 색깔 부여 panel[i] = new JPanel(); panel[i].setBackground(color); } // 패널에 글씨 넣기 for (int i = 0; i < 10; i++) { label[i] = new JLabel(""+i); //글꼴 설정 Font font = new Font("Times New Roman", Font.ITALIC, 30); label[i].setFont(font); //패널에 위의 라벨을 추가하기 panel[i].add(label[i]); } // 0~9까지 패널들에 카드 레이아웃의 Show 메소드가 인식할 수 있게 이름을 부여한다. for (int i = 0; i <10; i++) { frame.add(panel[i], ""+i); } } public static void main(String[] args) { new Deck(); } }
이 레이아웃의 경우 크게 2가지를 주의해서 사용해야 한다. 우선
1. makeFrame() 메서드를 살펴보자.
setLayout()에서 cardLayout으로 레이아웃을 바꿔주었다.
그리고 나서 사용자로부터 숫자를 입력받았을 때 이와 같은 이름을 갖는 카드 레이아웃의 패를 출력하는 keyTyped 함수를 오버라이딩 하였다.
카드 레이아웃은
show(부모 컨테이너, 카드 패의 id)라는 함수
를 통해서 id에 해당하는 JFrame을 최상단에 출력해줄 수 있다.
이 예제의 경우 부모 컨테이너가 MainFrame의 레퍼런스를 갖고 오기 위해 getContentPane()을 사용하였다.
그리고 출력하고 싶은 카드의 id를 넘기기 위해 읽은 키를 Strings으로 변환하여 전달하였다.
2. makeCards() 라는 메서드 안의 frame.add(); 라는 함수가 보이는가?
이 함수는 cardLayout이 적용될 컨테이너인 JFrame(카드패) 에 각 카드라고 할 수 있는 JPanel(카드들)을 삽입할 때 번호를 부여하고 있는 함수이다.
이제 키 리스너의 show 함수가 작동하면 입력받은 값에 맞는 카드 패를 보여줄 수 있다!
'프로그래밍 > 자바프로그래밍' 카테고리의 다른 글
[JAVA] MP3 플레이어 (0) | 2019.04.07 |
---|---|
[JAVA] 전자앨범 (0) | 2019.04.07 |
Comments