본문 바로가기
🚗 Major Study (Bachelor)/🟠 JAVA Programming

JAVA 프로그래밍 15.3장

by UKHYUN22 2021. 12. 7.
728x90


Layout Manager를 두 개 추가하게 되는 것

 


Box Layout Manager는 수평 Box가 있고 수직 Box가 있고 아주 얇은 무엇인가의 Box가 존재한다. 그리고 Red Green 버튼이 있다. 쌓아 나가는 layout을 말한다.

 


Box Layout Manager
column인데 single이거나 row인데 single을 넣는 것을 말한다.
X_AXIS, Y_AXIS 일정 공간에 해당하는 사이즈를 Strut을 말한다. 
Strut: 사이즈가 고정되어 정해주는 것
Glue: 사이즈가 정해지지 않아서 알아서 채워달라! 라는 개념이 된다.
BoxContainer를 쓰면 궅이 BoxLayout을 선언하지 않아도 default로 설정된 것이다.

 


기존의 다른 Layout가 비슷하게 구성할 수 있다.
Horizon은 flow/ Vertical은 grid에서 column이 하나짜리 처럼 구성할 수 있다.
box Layout의 가장 큰 장점은 strut이나 glue를 가지고 space 처리를 할 수 있다는 것이다.

 


Panel을 만들어 new BoxLayout을 선언하고 항상 Horizon인지 Vertical인지를 정해줘야 한다. X_AXIS는 horizontal하게 쓰겠다는 것이다. Strut를 통해서 빈 공간을 정해주겠다는 것이다.
createHorizontalStrut는 Box라는 컨테이너 안에 정의되어있는 static method이다.

 


JPanel로 만들어 놓고  해당 Panel의 Layout Manger를 BoxLayout으로 하겠다 선언하며 X_AXIS를 통해 horizontal하게 하겠다라고 말해준다. Strut 사이즈를 정해주고 horizontalPanel에 strut 선언해준 것을 add해준다.

 


두 번재 strut를 만들고 add해서 넣어주면 red 버튼과 Green 버튼 사이에 빈 공간을 할당할 수 있게 되는 것이다.
setLayout에서 Y_AXIS를 통해서 작성하게 되면 VerticalStrut의 2만큼 공간을 주면 2만큼 해당하는 공간이 Veritcal Bar에 들어가게 된다.

 


Vertical panel은 East에 갔다 놓게 된다.

 

 


Struts and Glue
invisible 하다는 것은 빈 공간이라는 것이고, horizon과 vertical하게 만드는데 폭이 정해져 있거나 높이가 정해져 있다.
size를 예측하지 못하는 경우가 존재하는데 그 경우에는 glue를 사용한다.

 


X_AXIS horizontal 선언을 해주고 Sturt 2만큼해서 추가하고  그 다음에 Glue를 넣어준다. 
Red와 GRE 왼쪽과 오른쪽은 Strut 가운데 공간은 GlUE를 넣어준다.

 


Component 사이에 공간을 주는 방법 setHgap과 setVgap을 사용할 수 있다.

 


Box Container Class
Jpanel을 가져오면 어떤 Layout을 쓸지 모른다. 그래서 처음부터 Box 를 쓰겠다 하면 바로 createHorizontalBox 하면 되고 createVertiacalBox하면 된다. Box Layout이 default로 설정되어있다.

 


Box verticalBox = Box.createVerticalBox() 하면 바로 사용할 수 있다.

 


CardLayout Manager
보이는 것은 하나만 보인다. 차례대로 보는 것이 아닌 Jump 해서 볼 수 있다고 함
왼손에 해당하는 것이 deckPanel 이된다. start라는 카드를 add하는 기능
dealer가 오른손에 해당하고 show하면 start에 해당하는 것을 보이라!라는 것.
유의할 점.. HorizontalPanel 
Cardlayout에서는 그러면 안된다. new CarLayout 이렇게 하면 안됀다.
CardLayout에 해당하는 특정 object 변수가 안 만들어져 있다. 이런 것을 보고 anonymous object라고 한다. 할당이 되지 않은 것이다. 기존의 Layout은 anonymous layout의 개념으로 얼마든지 사용할 수 있었지만 cardLayout은 정체가 들어나야 한다. 

 


deckPanel 은 왼손이고 dealer는 오른손이다.
deckPanel은 Container이다 무언가를 담는다. 3개의 카드를 담는다. 3개의 카드를 갖고 있는 손. Panel 안에 Panel이 들어갈 수 있다. 3 카드가 들어가라!!
dealer = new CardLayout() 즉 dealer라는 변수에 넣고 setLayout(dealer)로 해야 한다. dealer가 하는 show next first라는 역할을 수행해야 하기 때문이다. 왼손이 가지고 있는 카드 중에 해당 카드를 보여줘라 다음 카드, 혹은 맨 위의
카드를 보여줘라 등의 기능을 수행해야 한다.

 


CarLayout Manager Class
add 라는 메소드. panel에 넣어주게 된다.

 


dealer.first, next라는 메소드가 있다.

 


3개의 카드를 가지고 있는 부분이 회색 부분이고 Red, Green Reset 버튼은 오른손이 실행해야 하는 역할이다. 
deckPanel = new Panel();
dealr = new CardLayout();
decPanel.setLayout(dealer)이렇게 선언해야 한다.
deckPanel에 차근 차근 add를 한다. 총 3장의 카드를 add해야 한다.

 


actionPerformed가 오른손에 해당하며 dealer.show를 통해서 보여주게 된다.


'🚗 Major Study (Bachelor) > 🟠 JAVA Programming' 카테고리의 다른 글

JAVA 프로그래밍 16장 Thread  (0) 2021.12.12
JAVA 프로그래밍 15.4장  (0) 2021.12.07
JAVA 프로그래밍 15.2장  (0) 2021.12.07
JAVA 프로그래밍 15.1장  (0) 2021.12.07
JAVA 프로그래밍 12.3  (0) 2021.11.17