ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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두 가지 상황을 가정해보고, 바뀌는 부분은 본질이 아니고, 공통되게 필요한 것을 도메인으로 빼내면 좋을 것 같다.

    댓글

Designed by Tistory.