자바 스윙 GridBagLayout 격자 봉투 레이아웃 의 실현

1.레이아웃:GridBagLayout
공식 자바 Docsapi:java.awt.GridBagLayout
GridBagLayout,격자 봉투 레이아웃 관리자.구성 요소 의 크기 가 같 지 않 으 면 구성 요 소 를 수직,수평 또는 기본 라인 에 따라 정렬 할 수 있 습 니 다.모든 GridBagLayout 대상 은 하나의 동적 사각형 셀 을 유지 합 니 다.(동적 으로 하나의 셀 의 크기 를 계산 합 니 다)각 구성 요 소 는 하나 이상 의 셀 을 차지 합 니 다.이 셀 은 디 스 플레이 영역 이 라 고 합 니 다.각 구성 요소 의 디 스 플레이 영역 은 왼쪽 에서 오른쪽으로,위 에서 아래로 순서대로 배열 되 어 있 습 니 다.
2.구속:GridBagConstraints
GridBagConstraints 는 구성 요소 에 대한 제약 속성 을 패키지 합 니 다.GridBagLayout 가 관리 하 는 구성 요소 마다 이 제약 인 스 턴 스 를 연결 하여 구성 요소 가 있 는 디 스 플레이 구역 의 구체 적 인 배치 위치 와 구성 요소 가 디 스 플레이 영역 에서 정렬 하 는 방식 을 지정 합 니 다.
구성 요소 에 제약 조건 추가:GridBagLayout.setConstraints(Component comp,GridBagConstraints c)
PS:구성 요소(소재)디 스 플레이 영역(하나 이상 의 셀 구성)과 구성 요소 가 디 스 플레이 영역 에서 정렬 하 는 방식 이라는 두 가지 개념 을 이해 해 야 합 니 다.
3.속성:GridBagConstraints 의 속성
다음 속성 설명 에 있 는 대문자 상수 가 GridBagConstraints 클래스 에 정의 되 어 있 습 니 다.
3.1 디 스 플레이 영역 제약 속성
구성 요소 의 디 스 플레이 영역 관련 제약 속성 은 구성 요소 가 있 는 디 스 플레이 영역 에 직접 작용 합 니 다.
(1)gridx, gridy
구성 요소 디 스 플레이 영역 이 표시 되 기 시작 하 는 위치(셀 좌표),용기 왼쪽 상단 의 첫 번 째 셀 위 치 는(0,0),기본 값 은 RELATIVE 로'이전 구성 요소'(행렬 마지막 에 추 가 된 구성 요소)의'뒤에'를 표시 합 니 다.
(2)gridwidth, gridheight
구성 요 소 는 영역 수준/세로 방향 이 셀 의 개 수 를 표시 합 니 다.기본 값 은 1 입 니 다.여러 줄/열 을 차지 하려 면 전체 결과 에 충분 한 줄/열 이 필요 합 니 다.다음 두 개의 상수 특수 값 을 선택 할 수 있 습 니 다.
  • REMAINDER:익숙 한 줄/열 에 남 은 모든 셀 을 차지 합 니 다(이 값 은 줄 바 꿈 을 실현 할 수 있 습 니 다).
  • RELATIVE:행/열 에 남 은 마지막 두 번 째 셀 을 차지 합 니 다.(이 값 을 사용 하면 행/열 에 있 는 마지막 셀 은 구성 요 소 를 합 리 적 으로 배정 하고 수 동 으로 줄 을 바 꿔 야 합 니 다.)
  • 이 값 을 설정 하면'앞'이나'뒤'셀 에 공백 이 있어 서 는 안 됩 니 다.그렇지 않 으 면 유효 하지 않 을 수 있 습 니 다.
    (3)weightx, weighty
    추가 공간(셀 영역 외,용기 가장자리 내 간격)을 어떻게 분포 하 는 지 지정 한 줄/열 에 있 는 임의의 구성 요소 의 가중치(0 이상)가 있 으 면 이 줄/열 은(다른 줄/열 과 가중치 비례)추가 수준/수직 공간 을 분배 합 니 다.가중치 가 0(기본 값)일 때 전체 셀 영역 이 용기 중심 에 있 습 니 다.
    PS:java.awt.Window.pack()방법 을 호출 하면 이 값 은 유효 하지 않 습 니 다.pack 이후 추가 공간 이 없 기 때 문 입 니 다.
    3.2 구성 요소 제약 속성
    구성 요소 관련 제약 속성 은 구성 요소 에 직접 작용 합 니 다.
    (1)fill
    디 스 플레이 영역 크기 가 구성 요소 에 필요 한 시간 보다 크 면 구성 요소 가 디 스 플레이 영역 에 채 워 집 니 다.가능 한 값 은 다음 과 같 습 니 다.
  • NONE:(기본 값)구성 요소 크기 를 조정 하지 않 습 니 다.
  • HORIZONTAL:구성 요 소 를 넓 혀 수평 방향 으로 표시 영역 을 채 우지 만 높이 를 바 꾸 지 않 습 니 다.
  • VERTICAL:구성 요 소 를 높이 고 수직 방향 으로 표시 영역 을 채 우지 만 폭 을 바 꾸 지 않 습 니 다.
  • BOTH:구성 요소 가 표시 영역 을 완전히 채 웁 니 다.
  • (2)anchor
    구성 요소 가 디 스 플레이 영역 내 위치(정렬 방식)에 있 습 니 다.다음 세 가지 값 이 있 을 수 있 습 니 다.
    절대 치
    상대 방향 값
    기선 에 대한 값
    NORTH
    PAGE_START
    BASELINE
    SOUTH
    PAGE_END
    BASELINE_LEADING
    WEST
    LINE_START
    BASELINE_TRAILING
    EAST
    LINE_END
    ABOVE_BASELINE
    NORTHWEST
    FIRST_LINE_START
    ABOVE_BASELINE_LEADING
    NORTHEAST
    FIRST_LINE_END
    ABOVE_BASELINE_TRAILING
    SOUTHWEST
    LAST_LINE_START
    BELOW_BASELINE
    SOUTHEAST
    LAST_LINE_END
    BELOW_BASELINE_LEADING
    CENTER(기본 값)
    BELOW_BASELINE_TRAILING
    (3)ipadx, ipady
    구성 요소 의 내부 채 우기(구성 요소 의 내부 간격 으로 볼 수 있 음),즉 구성 요소 의 최소 크기 에 대한 추 가 량 입 니 다.구성 요소 의 폭 은 최소 너비/높이 에 ipadx/ipady 픽 셀 을 추가 합 니 다.
    (4)insets
    구성 요소 의 외부 채 우기(구성 요소 의 바깥쪽 거리 라 고 볼 수도 있 고 표시 영역 내 여백 이 라 고 볼 수도 있 습 니 다),즉 구성 요소 와 표시 영역 가장자리 사이 의 간격 이 가장 적 습 니 다.
    PS:위의 각 속성 값 과 다른 요소 가 충돌 하거나 호 환 되 지 않 을 수 있 습 니 다.반드시 설정 이 효과 가 있 는 것 은 아 닙 니 다.실험 을 많이 하고 테스트 Demo 를 많이 써 서 시도 하 는 것 을 권장 합 니 다.
    4.사례:GridBagLayout 사용 사례
    먼저 효 과 를 보 여 줍 니 다.다음 그림 과 같 습 니 다.

    각 단추 제약 조건 파라미터:
  • 버튼 01,버튼 02,버튼 03:기본 값
  • Button04:gridwidth = REMAINDER、fill = BOTH
  • Button05:gridwidth = REMAINDER、fill = BOTH
  • Button06:gridwidth = RELATIVE、fill = BOTH
  • Button07:gridwidth = REMAINDER
  • Button08:gridheight = 2、fill = BOTH
  • Button09:gridwidth = REMAINDER、fill = BOTH
  • Button10:gridwidth = REMAINDER、fill = BOTH
  • 코드 구현:
    
    package com.xiets.swing;
    
    import javax.swing.*;
    import java.awt.*;
    
    public class Main {
    
     public static void main(String[] args) {
      JFrame jf = new JFrame("    ");
      jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    
      GridBagLayout gridBag = new GridBagLayout(); //      
      GridBagConstraints c = null;     //   
    
      JPanel panel = new JPanel(gridBag);
    
      JButton btn01 = new JButton("Button01");
      JButton btn02 = new JButton("Button02");
      JButton btn03 = new JButton("Button03");
      JButton btn04 = new JButton("Button04");
      JButton btn05 = new JButton("Button05");
      JButton btn06 = new JButton("Button06");
      JButton btn07 = new JButton("Button07");
      JButton btn08 = new JButton("Button08");
      JButton btn09 = new JButton("Button09");
      JButton btn10 = new JButton("Button10");
    
      /*                    */
      // Button01
      c = new GridBagConstraints();
      gridBag.addLayoutComponent(btn01, c); //         c    
    
      // Button02
      c = new GridBagConstraints();
      gridBag.addLayoutComponent(btn02, c);
    
      // Button03
      c = new GridBagConstraints();
      gridBag.addLayoutComponent(btn03, c);
    
      // Button04              (  ),        
      c = new GridBagConstraints();
      c.gridwidth = GridBagConstraints.REMAINDER;
      c.fill = GridBagConstraints.BOTH;
      gridBag.addLayoutComponent(btn04, c);
    
      // Button05         (  ),        
      c = new GridBagConstraints();
      c.gridwidth = GridBagConstraints.REMAINDER;
      c.fill = GridBagConstraints.BOTH;
      gridBag.addLayoutComponent(btn05, c);
    
      // Button06                  (            ),        
      c = new GridBagConstraints();
      c.gridwidth = GridBagConstraints.RELATIVE;
      c.fill = GridBagConstraints.BOTH;
      gridBag.addLayoutComponent(btn06, c);
    
      // Button07              (  )
      c = new GridBagConstraints();
      c.gridwidth = GridBagConstraints.REMAINDER;
      gridBag.addLayoutComponent(btn07, c);
    
      // Button08        ,        
      c = new GridBagConstraints();
      c.gridheight = 2;
      c.fill = GridBagConstraints.BOTH;
      gridBag.addLayoutComponent(btn08, c);
    
      // Button09              (  ),        
      c = new GridBagConstraints();
      c.gridwidth = GridBagConstraints.REMAINDER;
      c.fill = GridBagConstraints.BOTH;
      gridBag.addLayoutComponent(btn09, c);
    
      // Button10              (  ),        
      c = new GridBagConstraints();
      c.gridwidth = GridBagConstraints.REMAINDER;
      c.fill = GridBagConstraints.BOTH;
      gridBag.addLayoutComponent(btn10, c);
    
      /*              */
      panel.add(btn01);
      panel.add(btn02);
      panel.add(btn03);
      panel.add(btn04);
      panel.add(btn05);
      panel.add(btn06);
      panel.add(btn07);
      panel.add(btn08);
      panel.add(btn09);
      panel.add(btn10);
    
      jf.setContentPane(panel);
      jf.pack();
      jf.setLocationRelativeTo(null);
      jf.setVisible(true);
     }
    
    }
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기