2014-02-16 2 views
1

선택할 최적의 레이아웃을 찾으려고합니다. 나는로 JPanel을 확장하여 만든 grid이 있습니다Java Swing을 사용하여 레이아웃

public class TestPane extends JPanel{ 
    // code 
} 

나는 텍스트/숫자를 표시 할

  • 라벨이 필요합니다.
  • 사용자가 옵션을 선택하기위한 드롭 다운 목록입니다.
  • 사용자가 일부 매개 변수를 입력 할 수있는 텍스트 필드입니다.

편집

Approximate layout

이 그림의 초안이다. 너무 깔끔한 것에 대해 유감스럽게 생각합니다.

사용할 레이아웃에 대한 제안.

레이블과 grid은 알고리즘 계산으로 계속 업데이트됩니다.

편집 - grid 구성 요소가 크므로 왼쪽 또는 오른쪽 중 하나 일 필요가 있다고 생각했습니다. 남은 구성 요소는 다른 행에있을 수 있습니다.

는 내가 건너 온 몇 가지 예제 코드와 함께 GridBagLayout에 사용하기 시작하지만에 그리드를 추가하는 방법에 관해서는 나는 확실하지 오전 : 나는 또한 어떤 방식이 좋은 보이게 것이다로서 생각하고

import java.awt.EventQueue; 
import java.awt.GridBagLayout; 
import java.awt.GridBagConstraints; 
import java.awt.Color; 
import javax.swing.BorderFactory; 
import javax.swing.border.Border; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JButton; 
import javax.swing.JLabel; 


public class GridBagLayoutExample { 
JFrame guiFrame; 


public static void main(String[] args) { 

    //Use the event dispatch thread for Swing components 
    EventQueue.invokeLater(new Runnable() 
    { 

     @Override 
     public void run() 
     { 

      new GridBagLayoutExample();   
     } 
    }); 

} 

public GridBagLayoutExample() 
{ 
    guiFrame = new JFrame(); 

    //make sure the program exits when the frame closes 
    guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    guiFrame.setTitle("GridBagLayout Example"); 
    guiFrame.setSize(600,300); 

    //This will center the JFrame in the middle of the screen 
    guiFrame.setLocationRelativeTo(null); 

    //creating a border to highlight the component areas 
    Border outline = BorderFactory.createLineBorder(Color.black); 

    //create GribBagLayout and the GridBagLayout Constraints 
    GridBagLayout gridBag = new GridBagLayout(); 
    GridBagConstraints cons = new GridBagConstraints(); 

    cons.fill = GridBagConstraints.BOTH; 

    JPanel compPanel = new JPanel(); 
    compPanel.setLayout(gridBag); 

    cons.gridx = 2; 
    cons.gridy = 2; 
    JLabel randomLbl = new JLabel("In Xanadu did Kubla Khan, " 
      + "A stately pleasure-dome decree"); 
    randomLbl.setBorder(outline); 
    gridBag.setConstraints(randomLbl, cons); 
    compPanel.add(randomLbl); 

    cons.ipady = 100; 
    cons.ipadx = 100; 
    cons.weighty = 1.0; 
    cons.gridx = 0; 
    cons.gridy = 0; 
    JLabel tallLbl = new JLabel("Tall and Long"); 
    tallLbl.setBorder(outline); 
    gridBag.setConstraints(tallLbl, cons); 
    compPanel.add(tallLbl); 

    cons.ipady = 50; 
    cons.ipadx = 100; 
    cons.weightx = 0; 
    cons.gridx = 0; 
    cons.gridy = 1; 
    JButton hello = new JButton("Hello"); 
    gridBag.setConstraints(hello, cons); 
    compPanel.add(hello); 

    cons.ipady = 100; 
    cons.ipadx = 10; 
    cons.gridx = 1; 
    cons.gridy = 1; 
    JButton goodbye = new JButton("GoodBye"); 
    gridBag.setConstraints(goodbye, cons); 
    compPanel.add(goodbye); 

    cons.weightx = 0; 
    cons.gridx = 0; 
    cons.gridy = 2; 
    JButton eh = new JButton("eh?"); 
    gridBag.setConstraints(eh, cons); 
    compPanel.add(eh); 


    guiFrame.add(compPanel); 
    guiFrame.setVisible(true); 

} 

} 

을 . 그리드를 레이블과 텍스트 상자와 별도로 또는 함께 사용해야합니까? 디자인 관점에서 어느 것이 좋습니다?

+2

추천 정보가 충분하지 않습니다. 모든 구성 요소를 한 행 또는 여섯 개의 별도 행에 넣을 지 여부는 알 수 없습니다. [레이아웃 관리자] (http://docs.oracle.com/javase/tutorial/uiswing/layout)에서 스윙 튜토리얼을 읽으십시오. /visual.html). 그래서 스스로 결정할 수 있습니다. 다른 레이아웃 관리자가있는 패널을 중첩하여 원하는 레이아웃을 얻을 수 있음을 기억하십시오. – camickr

+0

MIG 레이아웃을 살펴보십시오. 타사 라이브러리이지만 GUI 응용 프로그램을 빠르고 쉽게 작성할 수 있습니다. http://www.miglayout.com/ –

+0

@HovercraftFullOfEels 위의 편집을 참조하십시오. – Dinesh

답변

3

UI를 세분화하여 책임 영역으로 나누십시오.또한 예를 들어, 서브 그룹이

Main

레이아웃을 제안하면, 당신은 예를 들어, 세 가지 주요 영역을 가지고에서

...

Sub

내 마음에, 이것은 당신의 필요에 따라 최소한 2 ~ 3 명의 레이아웃 관리자의 가능성을 불러옵니다. 일반적으로 복합 레이아웃이라고합니다.

"그리드"영역부터 시작하십시오.

기본 그리드는 사용자의 필요에 따라 GridBagLayout 또는 GridLayout입니다. 그러면 주 GridPanel이 생성됩니다.

JPanel에 이것을 추가하면 BorderLayout이 사용되고 가운데 위치에 추가됩니다.

이 패널에 "현재 상태"구성 요소를 SOUTH 위치에 추가합니다. 이것은 GridStatePanel을 형성합니다.

그런 다음 다른 JPanel을 만들고 아마도 GridBagLayout을 사용하여 필드 (노란색 섹션)를 추가하면 FieldsPanel이됩니다.

당신은 다른 JPanel와 아마 BorderLayout를 사용하여이는 WEST 위치로 FieldsPanel과 중앙에 GridStatePanel를 추가 만들 것입니다. 이것은 기본 패널 또는 기본 패널을 구성 할 것입니다 ... 나는 이것을 MainContentPane ...이라고 부를 것이고, 그래서 우리는 우리가 무엇을 말하고 있는지 알 것입니다.

거기에서 게스트 JPanel을 새로 만듭니다. NORTH 위치에 '제목'구성 요소를 추가 한 다음 MainContentPane을 가운데에 추가합니다.

이것은 매우 강력하고 중요한 개념으로 한 번에 전체 레이아웃을 레이아웃 할 수있는 단일 레이아웃 관리자를 찾는 것은 매우 어려울 것입니다.

0

사용 layout managers의 GridBagLayout은 버튼, 텍스트 필드로 JObjects을 구성하고, 당신은이 모든 일을 GridBagLayout을 사용하는 경우 매우 혼란 될거야

2

콤보하는 등. 나는 레이아웃을 구성하는 편을 선호하는 경향이 있습니다. 레이아웃이 나에게 어떻게 보이는지 다음과 같습니다.

  1. 가장 바깥 쪽 패널에는 서쪽 및 중심이있는 BorderLayout이 있습니다. (BorderLayout을 기억해두면, 창문이 늘어나거나 서쪽 (또는 동쪽, 북쪽, 남쪽)에있는 물건은 펼쳐지지 않습니다.)

  2. 센터 내에는 JPanel도 있습니다. BorderLayout 북쪽에는 JLabel ("제목")이 있습니다. 중앙에는 테이블이 있습니다. 남쪽에는 JLabel ("현재 상태")

  3. 서쪽에는 다른 BorderLayout이있는 JPanel이 있습니다. 북쪽에는 JLabels (Label1, Label2, Label3) 및 관련 텍스트 필드가있는 GridLayout (3, 2)이있는 JPanel이 있습니다. 센터에는 드롭 다운 목록이 있습니다 (어쩌면 귀하의 다이어그램에서 불명확 할 수도 있음). 남쪽에는 버튼이 있습니다. (버튼의 크기를 제한하려면 버튼의 전체 크기가 필요합니다.)

관련 문제