[Java Swing] 자바 스윙 화면 구조(내가 이해한)

Date:     Last Updated:

자바 스윙 화면 구조

아마 학원에서 자바를 좀 배우고 나면 자바 swing과 jdbc로 프로젝트를 한다고 알고 있다. 그래서 지금 당장은 수업 따라가기에 무리도 없고 해서 프로젝트를 하나 해보자 해서 나름 열심히 고민해서 ToDoList를 만들어보기로 했다. UI참고는 아이폰 어플인 todo mate와 비슷하게 가기로 했다. 인터넷과 연동은 하지 않을 예정이라서 크게 어려운 부분은 없겠지 라고 생각했지만 역시나 언제나 처음이 제일 어려운 것 같다. 화면 구조를 이해하고 어느 정도 내 마음대로 다룰 수 있을 때까지 대략 1~2일 정도 걸린 것 같다.

처음 이해한 구조

내가 처음에 이해한 패널 구조

아주 간단하게 그렸는데 내가 처음 생각한 화면의 구조는 이러했다. frame이 있고 그 frame이 우리가 보는 화면 크기이고 거기에 패널을 여러개 붙여서 ui를 만들어서 사용자에게 보여준다. 틀린 말은 아니었는데 한가지 생각하지 못했던 게 “레이아웃 관리자” 였다. flowlayout, boxlayout, gridlayout 자바 스윙에는 화면을 정렬하기 위한 다양한 레이아웃을 제공했다. 처음에는 그것도 모르고 약간 setBound 느낌으로 일일히 지정해주거나 relativeTo로 배치관계만 조절해주면 화면 나타내는 건 크게 무리 없겠지 했다. 근데 그러다가 패널 2개 만들어서 탭처럼 보여주자! 하고 구현했다가. 그걸로만 거의 하루를 날려먹었다. 아무리 패널을 2개 만들어서 frame에 붙여줘도 절대 2개가 같이 나오는 법이 없고 무조건 하나씩만 나오는 거였다. 그래서 뭐가 문젠지 진짜 계속 검색했는데 layout이라고 구글에 엄청 많이 나오는데도 이게 뭐지? 하면서 시간보내다가 결국 고민고민 끝에 레이아웃 관리자를 컨트롤 해야만 내가 원하는 화면을 만들 수 있다는 걸 깨닫고 공부하기로 했다.

현재 이해한 구조

자바 스윙 화면 구조

완벽하지는 않지만 현재 내가 이해한 스윙의 화면구조이다. 이 그림을 레이아웃을 아예 꺼버리고 직접 위치를 주어서 구현할 수도 있지만, 그건 너무 비효율적이고 스윙에 관해서 배우는 것도 아니어서 처음부터 선택지에서 뺐다. 아마도 frame도 여러가지 만들 수 있겠지만 일단 frame은 하나만 쓰고 그 위에 panel을 붙이면서 ui만들기로 했고 그 과정에서 flowlayout(기본 레이아웃), boxlayout, borderlayout 등등 계속 이게 좋나 저게 좋나 써봤다. 지금도 완벽하게 내 뜻대로는 못하지만 현재 내 프로젝트를 하는 수준에서는 충분할 것 같다.


Leave a comment