2013-10-04 7 views
0

다음 그래프와 같이 패널에 4 개의 구성 요소 A, B, C, D를 배치하고 싶습니다. 이 작업을 수행하기 위해 사용할 수있는 레이아웃 또는 방법은 무엇입니까?Java Swing 이러한 구성 요소를 배치하십시오.

P. A와 D를 평행하게 배치하는 것이 더 쉬운 경우 허용됩니다. 나는 단지 D가 오른쪽과 약간 북쪽이지만 A, B, C가 수직으로 가운데에 위치하기를 바랍니다.

A B C는 정렬되어야합니다. 나는 나쁜 그림을 유감스럽게 느낀다.

enter image description here

+0

A, B 및 C의 왼쪽 및 오른쪽 가장자리가 의도적으로 정렬되지 않았습니까? – jla

+1

'GridBagLayout'을 사용해보십시오. –

+0

'GridBagLayout'을 위해 제약 조건의 'anchor'를'FIRST_LINE_END'로 설정하고'HORIZONTAL'을 채워 원하는 곳에서 D를 얻습니다. (필요한 경우 예제를 게시 할 수 있습니다.) – Smitty

답변

0

많은 옵션이 있습니다. 언급 된 다른 사람들처럼 GridBagLayout 네이티브 Java에서 가장 인기 있고 강력한 레이아웃 관리자 중 하나입니다. GroupLayout을 사용해도 좋지만, 머리를 감싸는 것이 더 어렵습니다 ...하지만 제 3 자 라이브러리를 추가하는 것에 반대하지 않는다면 요즘 대부분의 경우 MigLayout을 사용하고 있습니다. 레이아웃 제약 조건은 문자열이며, 모든 것은 비교적 간단하게 조합 할 수 있습니다.

0

다음은 간단한 예입니다. 이렇게하면 D 구성 요소가 항상 오른쪽 상단에 있고 A, B, C 구성 요소가 항상 중앙에 있는지 확인합니다. 그것을 실행하고 큰 프레임을 드래그하십시오. D 구성 요소가 항상 패널의 오른쪽 상단에 표시됩니다.

import java.awt.*; 
import javax.swing.*; 

public class Test { 

    public Test() { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
     frame.add(new MyPanel()); 
     frame.pack(); 
     frame.setMinimumSize(frame.getPreferredSize()); 
     frame.setVisible(true); 
    } 

    class MyPanel extends JPanel {  
     public MyPanel() { 
      JTextField labelA = new JTextField("Your A component"); 
      JTextField labelB = new JTextField("Your B component"); 
      JTextField labelC = new JTextField("Your C component"); 
      JTextField labelD = new JTextField("Top Right D"); 

      JPanel north = new JPanel(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.anchor = GridBagConstraints.FIRST_LINE_END; 
      gbc.weightx = 1; 
      gbc.insets = new Insets(10, 10, 10, 10); 
      north.add(labelD, gbc); 

      JPanel south = new JPanel(new GridBagLayout()); 
      gbc.anchor = GridBagConstraints.CENTER; 
      gbc.gridy = 0; 
      south.add(labelA, gbc); 
      gbc.gridy = 1; 
      south.add(labelB, gbc); 
      gbc.gridy = 2; 
      south.add(labelC, gbc); 

      setLayout(new BorderLayout()); 
      add(north, BorderLayout.NORTH); 
      add(south, BorderLayout.CENTER); 
     } 
    } 

    public static void main(String[] args) { 
     new Test(); 
    } 
} 
관련 문제