-
20220917 TIL 공유의 즐거움TIL 2022. 9. 17. 17:59
어제 스윙으로 배경사진을 넣는 방법에 대해 TIL을 썼었는데 블로그 탄생 이후 처음으로 하트 3개를 얻었다.
그리고 그 덕인지 모르겠지만 주식 매매 기법인 스윙에 대한 글을 많이 작성하신 분이 관심분야가 동일하다고
자주 오시겠다고 블로그의 첫 댓글을 남겨주셨는데..
자바 스윙도 배우고 계신 것일까..!
아무튼 관심 감사합니다!https://www.hankookilbo.com/News/Read/201704111063140949 나도 스윙에 대한 정보를 정리해 둔 블로그를 찾아 헤맸지만 자바 스윙은 정보가 메말랐다...
나중에 다시 찾아 볼 나를 위해서도, 열심히 고민 중인 남을 위해서도 찾기 어려운 정보를 공유하는 것은 좋은 일인 것 같다.
그래서 오늘도 스윙 팁들을 공유해보려고 한다.
스윙의 끝판왕 레이아웃 그리드백레이아웃을 소개합니다.
http://www.java2s.com/Code/Java/Swing-JFC/GridBagLayoutPane.htm GridBagLayout은 Grid를 사용하는데, 마음대로 Grid 크기를 바꿀 수 없는 그냥 GridLayout와 달리
조금 자유로운 레이아웃을 맘대로 잡을 수 있게 해준다.
GridBagLayout은 GridBagConstraints를 바꿔가면서 각 요소들을 자유롭게 마음대로 조절한다.
https://images.app.goo.gl/qC6t4LXdu739jn4v6
먼저, 이 인덱스에 익숙해져야 한다.
격자를 원하는 행, 열의 개수만큼 생각해두고, 그 격자 안에서 원하는 위치에 있는 cell의 (x, y)를
gbc.gridx
gbc.gridy
에 각각 대입해주면 된다.
그리고 어떤 요소를 격자 안에 넣었을 때 그 요소가 차지할 수 있는 선에서 최대로 채우고 싶을 때
gbc.fill
에 GridBagConstraints.HORIZONTAL(좌우로 최대로 길게), .BOTH(상하좌우 최대로), .VERTICAL(상하 최대로 길게)를 대입해주면 된다.
만약 어떤 요소가 격자 여러 칸을 차지 하게 하고 싶다면 (Button #1 Button #7처럼)
gbc.gridheight
gbc.gridwidth
에 몇 칸씩 원하는 지 대입해주면 된다.panel.setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; c.weightx = 1.0; c.gridx = 0; c.gridy = 0; panel.add(넣고 싶은 요소, c); c.fill = GridBagConstraints.BOTH; c.weightx = 0.0; c.gridx = 1; c.gridy = 0; panel.add(넣고 싶은 요소2, c); c.fill = GridBagConstraints.BOTH; c.insets = new Insets(10, 0, 0, 0); // 이 요소 위쪽으로 마진 넣기(띄우기) c.weighty = 1.0; c.gridwidth = 2; c.gridx = 0; c.gridy = 1; panel.add(넣고 싶은 요소3, c);
예를 들면 위와 같이 코드를 작성할 수 있다.
gbc.insets
는 요소들 사이에 간격을 주고 싶을 때 new Insets(top,left,bottom,right) 순으로 얼마나 띄워줄 지를 적어서 대입해주면 된다.
그리고 위 코드처럼 짜기 보다는
making a private void method to set the constraints or even your own "add" method, which takes a JComponent and the properties for the constraints 하는 것이 더 바람직하긴 하다.
위와 같이 css로 치면 padding이 들어있는, 까만 경계가 있는 패널을 만들고 싶다면
panel.setBorder(new CompoundBorder( BorderFactory.createLineBorder(Color.BLACK, 2), // 바깥쪽 라인 BorderFactory.createEmptyBorder(50, 50, 50, 50))); // 안쪽 라인
CompoundBorder을 통해 안쪽의 투명한 라인을 패딩처럼 넣어주고, 바깥쪽 라인도 넣어주면 된다.
내가 새롭게 알게 된 지식, 찾기 힘든 자료를 공유하면 공유하면서 한 번 정리가 돼서 나에게도 좋고,
같은 고민으로 어렵게 찾아 헤맬 분들에게도 도움이 많이 될 수 있어 좋다.
게다가 하트도 관심도 받을 수 있으니 지식을 많이 공유하자.
<오늘의 팁>
인텔리제이에서 프로젝트 전체 파일에서 검색하고 싶을 때 cmd shift f를 누르면 된다.
그리고 깃헙 웹페이지에서 바로 코드에디터를 열고 싶으면 . enter를 치면 된다.
본질(도메인)과 본질이 아닌 것(UI) 사이에서 헷갈린다면 GUI와 CLI두 가지 상황을 가정해보고, 바뀌는 부분은 본질이 아니고, 공통되게 필요한 것을 도메인으로 빼내면 좋을 것 같다.'TIL' 카테고리의 다른 글
20220919 TIL 괜찮아~ 잘 될 거야~ (0) 2022.09.19 20220918 TIL 미래의 나를 믿어보자 (0) 2022.09.18 20220916 TIL 스윙 스윙 스윙 마 베이베 (feat. 배경사진 넣기) (1) 2022.09.16 20220915 TIL 연습도 실전처럼 (0) 2022.09.15 20220914 TIL 코딩테스트를 TDD로 풀어보았다. (0) 2022.09.14