java 그래픽 인터페이스의 레이아웃 디자인

인터페이스 디자인에서 하나의 용기는 많은 구성 요소를 배치해야 한다. 미관을 위해 구성 요소를 용기에 배치하는 위치가 바로 레이아웃 디자인이다.java.awt에서 다양한 레이아웃 클래스를 정의했고 각 레이아웃 클래스는 레이아웃 전략에 대응한다.일반적으로 사용되는 레이아웃 클래스는 다음과 같습니다.
• FlowLayout, 어셈블리를 차례로 배치합니다.
• 경계에 어셈블리를 배치하는 BoarderLayout
• CardLayout, 구성 요소를 포커처럼 겹쳐놓고, 매번 한 개의 구성 요소만 표시합니다.
• 그리드 레이아웃(Grid Layout)은 표시 영역을 줄, 열에 따라 각각 같은 칸으로 나누고 구성 요소를 순서대로 칸에 넣는다.
• GridBagLayout은 표시 영역을 여러 개의 직사각형 작은 단원으로 나누어 구성 요소마다 하나 이상의 작은 단원을 차지할 수 있습니다.
그 중에서 GridBagLayout은 정밀한 위치 제어를 할 수 있고 가장 복잡하다. 본 강좌는 이런 구조 전략을 잠시 토론하지 않고 주제 문장에서 상세하게 설명할 것이다.
모든 용기에는 용기에 넣는 구성 요소를 어떻게 안배하는지 결정하는 레이아웃 관리자가 있습니다.레이아웃 관리자는 LayoutManager 인터페이스를 구현하는 클래스입니다.
하나.FlowLayout 레이아웃(JApplet, JPanel, JScrollPane 기본 레이아웃)
FlowLayout 레이아웃은 추가된 순서대로 구성 요소를 왼쪽에서 오른쪽으로 배열하고 한 줄이 가득 차면 한 줄로 옮겨서 왼쪽에서 오른쪽으로 배열하며 각 줄의 구성 요소는 가운데로 배열합니다.이것은 가장 간편한 레이아웃 전략으로 일반적으로 구성 요소가 많지 않은 경우에 사용되며, 구성 요소가 비교적 많을 때 용기 속의 구성 요소는 높낮이가 고르지 않고 줄마다 길이가 같지 않다.
FlowLayout은 작은 응용 프로그램과 패널의 기본 레이아웃입니다. FlowLayout 레이아웃의 구성 방법은 다음과 같습니다.
1. FlowLayout(), 기본 FlowLayout 레이아웃을 생성합니다.기본적으로 어셈블리는 중앙에 있고 간격은 픽셀 5개입니다.
2. FlowLayout(int aligment), 형당 구성 요소의 정렬 방식을 설정합니다.alignment 값은 FlowLayout입니다.LEFT,FlowLayout.CENTER,FlowLayout.RIGHT.
3. Flow Layout(int aligment, int horz, int vert), 정렬 방식을 설정하고 구성 요소의 수평 간격 horz와 수직 간격 vert를 설정하며 초클래스 Container의 방법으로 set Layout () 용기의 레이아웃을 설정합니다.예를 들어, 코드 setLayout(new FlowLayout()은 컨테이너에 FlowLayout 레이아웃을 설정합니다.구성 요소를 용기에 넣는 방법은add (구성 요소 이름) 입니다.
2.BorderLayout 레이아웃(JWindow, JFrame, JDialog의 기본 레이아웃)
Border Layout 레이아웃 전략은 용기 안의 공간을 간단하게 동쪽'East', 서쪽'West', 남쪽'South', 북쪽'North', 중'Center'5개 구역으로 나누는 것이다.구성 요소를 추가할 때, 구성 요소를 어느 구역에 두어야 하는지 알려야 한다.한 위치에 구성 요소를 놓다.만약 어느 위치에 여러 개의 구성 요소를 넣으려면 먼저 이 위치에 넣을 구성 요소를 다른 용기에 넣은 다음에 이 용기를 이 위치에 넣어야 한다.
BorderLayout 레이아웃의 구성 방법은 다음과 같습니다.
(1) BorderLayout(), 기본 BorderLayout 레이아웃을 생성합니다.기본적으로 간격이 없습니다.
(2) BorderLayout(int horz, int vert), 구성 요소 간의 수평 간격과 수직 간격을 설정합니다.
BorderLayout 레이아웃 정책의 설정 방법은 setLayout(new BorderLayout()입니다.구성 요소를 용기에 추가하는 방법은add (구성 요소 이름, 위치) 이며, 구성 요소를 추가할 때 위치를 지정하지 않으면 기본적으로'중'위치입니다.
BorderLayout 레이아웃은 JWindow, JFrame, JDialog의 기본 레이아웃입니다.
[예11-5] 응용 프로그램은 다섯 개의 라벨이 있는데 각각 창의 동쪽, 서쪽, 남쪽, 북쪽과 중간 다섯 구역에 놓여 있다.

 import javax.swing.*;import java.awt.*;
 public class J505{
   public static void main(String[]args){
     JLabel label1,label2,label3,label4,label5;
     JFrame mw=new JFrame(" ");// 
     mw.setSize(250,200);
     Container con=mw.getContentPane();
     con.setLayout(new BorderLayout());
     label1=new JLabel(" ");// 
     label2=new JLabel(" ",JLabel.CENTER);
     label3=new JLabel(" ");
     label4=new JLabel(" ",JLabel.CENTER);
     label5=new JLabel(" ",JLabel.CENTER);
     con.add(label1,"East");
     con.add(label2,"South");
     con.add(label3,"West");
     con.add(label4,"North");
     con.add(label5,"Center");
     mw.setVisible(true);
   }
 }
셋.GridLayout 레이아웃
GridLayout 레이아웃은 용기를 몇 개의 줄과 열로 나누는 격자 모양으로, 줄과 열의 수는 프로그램이 제어하고, 구성 요소는 격자의 작은 칸에 놓는다.GridLayout 레이아웃의 특징은 구성 요소의 위치가 비교적 정확하다는 것이다.GridLayout 레이아웃의 각 메쉬가 동일한 모양과 크기를 가지므로 컨테이너에 넣을 구성 요소도 같은 크기를 유지해야 합니다.
GridLayout 레이아웃의 구성 방법은 다음과 같습니다.
(1) GridLayout(), 단일 열의 GridLayout 레이아웃을 생성합니다.기본적으로 간격이 없습니다.
(2) GridLayout(introw, intcol), 행row와 열col이 있는 GridLayout 레이아웃을 설정합니다.
(3) GridLayout(introw, intcol, inthorz, intvert)은 레이아웃의 행과 열, 구성 요소의 수평 간격과 수직 간격을 설정합니다.
GridLayout 레이아웃은 비헤이비어 기준으로 배치된 구성 요소의 개수가 초과되면 자동으로 열을 추가합니다.반대로, 구성 요소가 너무 적으면 자동으로 열이 줄어들고, 줄 수는 변하지 않으며, 구성 요소는 줄 우선순위에 따라 배열된다(구성 요소에 따라 자동으로 열을 증감한다).GridLayout 레이아웃의 모든 격자는 구성 요소를 채워야 합니다. 격자가 공백이 되기를 원한다면 공백 라벨 (add (new Label () 으로 대체할 수 있습니다.
[예11-6] 작은 프로그램은 먼저 몇 개의 단추와 몇 개의 탭을 JPanel에 넣은 다음에 JPanel을 JScrollPane에 넣는다. 마지막으로 JScrollPane을 작은 프로그램의 창에 넣으면 프로그램이 만든 JScrollPane은 항상 수평과 수직 스크롤 바를 가지고 스크롤 판넬의 가시 범위가 패널의 실제 요구보다 작다. 스크롤 바를 이동할 수 있는 슬라이더는 패널이 원래 가시 범위에 있지 않은 구역을 표시한다.

import java.applet.*;
import javax.swing.*;
import java.awt.*;
class MyWindow extends JFrame{
  public MyWindow(int w,int h){
    setTitle(" ");
    Container con=getContentPane();
    con.setPreferredSize(new Dimension(w,h));
    con.setLayout(new BorderLayout());
    JPanel p=new JPanel();
    p.setLayout(new GridLayout(6,6));
    for (int i=0;i<6;i++){
      p.add(new JLabel());
      for(int j=1;j<=2;j++){
        p.add(new JButton(" "+(2*i+j)));
        p.add(new JLabel(" "+(2*i+j)));
      }
      p.add(new JLabel());
    }
    p.setBackground(Color.blue);
    p.setPreferredSize(new Dimension(w+60,h+60));
    JScrollPane ScrollPane=new JScrollPane(p);
    ScrollPane.setPreferredSize(new Dimension(w-60,h-60));
    add(ScrollPane,BorderLayout.CENTER);// 
    setVisible(true); pack();
  }
}
class ScrollPane extends JScrollPane{
  public ScrollPane(Component p){
    super(p);
    setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
  }
}
public class J506 extends Applet{
  MyWindow myWindow;
  public void init(){
    myWindow=new MyWindow(400,350);
  }
}

GridLayout 레이아웃은 모든 구성 요소의 크기를 일치시켜야 하기 때문에 인터페이스의 외관이 아름답지 않을 수 있습니다.구제 방법은 작은 구성 요소를 하나의 용기에 합쳐서 이 용기를 구성 요소로 하고 GridLayout 레이아웃에 넣는 것이다.이것이 바로 앞에서 말한 용기 삽입이다.예를 들어, 컨테이너 A는 GridLayout 레이아웃을 사용하여 컨테이너를 모두 메쉬로 구분합니다.다른 용기 B와 C는 각각 몇 개의 구성 요소를 넣은 후 B와 C를 각각 구성 요소로 용기 A에 추가합니다.용기 B와 C도 GridLayout 레이아웃으로 설정할 수 있으며, 자신을 약간의 격자로 나눌 수도 있고, 다른 레이아웃으로 설정할 수도 있다.이렇게 하면 외관을 보면 각 구성 요소의 크기에 차이가 있다.
사.CardLayout 레이아웃
CardLayout 레이아웃을 사용하는 용기는 여러 개의 구성 요소를 수용할 수 있지만, 여러 구성 요소는 같은 디스플레이 공간을 가지고 있으며, 어느 순간에 한 개의 구성 요소만 표시할 수 있습니다.카드 한 묶음이 매번 맨 위에 한 장만 표시되는 것처럼, 이 디스플레이의 구성 요소는 용기의 모든 공간을 차지할 것이다.CardLayout 레이아웃 설계 단계는 다음과 같습니다.
먼저 CardLayout 배치 객체를 작성합니다.그런 다음 setLayout () 방법을 사용하여 컨테이너의 레이아웃을 설정합니다.가장 좋은 것은 용기를 호출하는add () 방법으로 구성 요소를 용기에 넣는 것입니다.CardLayout 레이아웃 정책에 구성 요소를 추가하는 방법:
add(구성 요소 대명사, 구성 요소);
그 중에서 구성 요소 번호는 문자열이고 구성 요소 이름과 무관합니다.
예를 들어, 다음 코드는 JPanel 컨테이너에 CardLayout 레이아웃을 설정합니다.

  CardLayout myCard = new CardLayout();// CardLayout 
  JPanel p = new JPanel();// Panel 
  p.setLayout(myCard);
CardLayout 클래스에서 제공하는 방법으로 구성 요소를 표시하는 방법은 두 가지입니다.
(1) show(용기 이름, 구성 요소 번호) 형식의 코드를 사용하여 어떤 용기의 구성 요소 표시를 지정합니다.예를 들어 다음 코드는 용기 p의 구성 요소 번호 k를 지정하여 이 구성 요소를 표시합니다.
    myCard.show(p,k);
(2) 구성 요소가 용기에 들어가는 순서대로 구성 요소를 표시합니다.
first(컨테이너): 예를 들어, 코드 myCard.first(p);
last(컨테이너): 예를 들어, myCard.last(p);
next(컨테이너): 예를 들어, myCard.next(p);
previous(컨테이너): myCard.previous(p);
[예11-7] 작은 응용 프로그램은 CardLayout 레이아웃을 사용하고 패널 용기 p는 CardLayout 레이아웃 정책을 사용하여 10개의 레이블 구성 요소를 설정합니다.창에는 p의 첫 번째 구성 요소, 마지막 구성 요소, 현재 구성 요소의 이전 구성 요소와 현재 구성 요소의 마지막 구성 요소를 표시하는 4개의 단추가 있습니다.

import java.applet.*;import java.awt.*;
import java.awt.event.*;import javax.swing.*;
class MyPanel extends JPanel{
  int x;JLabel label1;
  MyPanel(int a){
    x=a;getSize();
    label1=new JLabel(" "+x+" ");add(label1);
  }
  public Dimension getPreferredSize(){
    return new Dimension(200,50);
  }
}
public class J507 extends Applet implements ActionListener{
  CardLayout mycard;MyPanel myPanel[];JPanel p;
  private void addButton(JPanel pan,String butName,ActionListener listener){
    JButton aButton=new JButton(butName);
    aButton.addActionListener(listener);
    pan.add(aButton);
  }
  public void init(){
    setLayout(new BorderLayout());// 
    mycard=new CardLayout();
    this.setSize(400,150);
    p=new JPanel();p.setLayout(mycard);//p 
    myPanel=new MyPanel[10];
    for(int i=0;i<10;i++){
      myPanel[i]=new MyPanel(i+1);
      p.add("A"+i,myPanel[i]);
    }
    JPanel p2=new JPanel();
    addButton(p2," ",this);
    addButton(p2," ",this);
    addButton(p2," ",this);
    addButton(p2," ",this);
    add(p,"Center"); add(p2,"South");
  }
  public void actionPerformed(ActionEvent e){
    if (e.getActionCommand().equals(" "))mycard.first(p);
    else if(e.getActionCommand().equals(" "))mycard.last(p);
    else if(e.getActionCommand().equals(" "))mycard.previous(p);
    else if(e.getActionCommand().equals(" "))mycard.next(p);
  }
}

5.null 레이아웃 및 setBounds 방법
빈 레이아웃은 용기의 레이아웃을null 레이아웃으로 설정하는 것입니다.빈 레이아웃은 setBounds() 방법으로 구성 요소 자체의 크기와 용기의 위치를 설정합니다.
    setBounds(int x,int y,int width,int height)
구성 요소가 차지하는 구역은 직사각형이고 매개 변수 x, y는 구성 요소의 왼쪽 상단이 용기에 있는 위치 좌표이다.매개 변수weight,height는 구성 요소의 너비와 높이입니다.빈 레이아웃에 구성 요소를 배치하는 방법은 두 단계로 나뉜다. 먼저add() 방법으로 몸통 용기에 구성 요소를 추가한다.그리고 setBounds() 방법을 사용하여 구성 요소가 용기에 있는 위치와 구성 요소 자체의 크기를 설정합니다.구성 요소와 관련된 다른 방법:
1.getSize().width,
2.getSize().height
3.setVgap(ing vgap)
4.setHgap(int hgap);

좋은 웹페이지 즐겨찾기