본문 바로가기

Project/TeamProject

[팀플 - movie_kiosk] ScrollPane 사용법

반응형

이번 팀 프로젝트 진행과정에서 제일 오류가 많았던 부분이 이 스크롤 기능이었다

 

7일 차에도 간략하게 설명하였지만, 한번 더 오류를 겪게 되었고 

조금 더 자세히 기록해두어야 할 필요성을 느끼게 되었다

 

Swing에서 Scroll을 사용하려면

JScrollPane scroll = new JScrollPane(Component);

 

우리는 Component부분에 패널을 넣었는데

그 패널이 맨 위 사진의 코드이다

 

하지만 그 panel 안에도 여러 개의 패널이 들어간다

 

처음 Component에 들어가는 panel은 위 장바구니 Frame안에 각각의 메뉴들이 다 들어있는 panel이고(편의상 mainP라고 하겠다),

그 panel 안에  panel들이 각각의 상품을 나타내는 더 작은 panel 들이다(편의상 miniP라고 하겠다)

 

7일 차에 작성한 내용처럼 스크롤 안에 들어가는 mainP의 레이아웃은 null이 되면 안 된다.

아예 세팅을 하지 않거나, 초기 세팅인 BorderLayout으로 지정해주어야 스크롤 기능이 적용되었다

 

하지만, miniP 안에 있는 각각의 Component들의 위치 조정을 하기 위해선,

miniP는 setLayout(null)을 지정하고 각각의 Component 들을 setBounds로 위치와 크기를 조정해야 GUI상 이쁘게 나온다

 

하지만 null로 지정하면 라벨과 버튼들(컴포넌트)이 원하는 위치에 삽입할 수 있지만, 스크롤 기능이 안됐고

반대로 스크롤 기능을 위해 BorderLayout으로 맞추면 컴포넌트들을 원하는 위치에 삽입할 수 없었다

 

구글링도 많이 해보고, FlowLayout 등 다른 레이아웃으로도 시도해봤지만 번번이 실패하였다

 

그러나 해답은 생각보다 간단했다

 

스크롤 기능을 구현하기 위해 BorderLayout을 쓰되,

setBounds로 원하는 위치에 삽입하기 위해 한 가지의 패널을 더 만들고 한개의 컴포넌트만 제외한 후 그 패널에 부착

[하나 더 만든 패널은 null로 레이아웃을 지정하고 setBounds로 컴포넌트들을 원하는 위치에 부착]

 

여기서 제일 중요한 것은

한가지 남겨놓은 컴포넌트(라벨이나 버튼)를 East 나 West에 넣어주어야 스크롤 기능이 구현되었다 

 

이때까지, Center에만 요소들을 넣어왔었는데

동쪽이나 서쪽에 컴포넌트를 넣어준다는 코드가 있어야만 스크롤 기능이 구현되었다

 

주관적인 생각으로는

가장 좌측/우측에 어떠한 요소가 있어야 레이아웃상에서 패널의 끝부분을 인지하고 스크롤을 넣는 듯한 느낌이 들었다

 

위 사진(장바구니) 상에서는 

이미지가 West 버튼이 East에 있어서 스크롤 기능이 구현됨을 확인할 수 있었다 (캡 처상으로는 스크롤 안보임)

 

반응형