2016-08-25 14 views
-1

여기에서이 문제에 대해 많이 읽었습니다 ...하지만이 문제를 해결하는 방법을 얻지 못하는 것 같습니다. 시도한 모든 해결책이 작동하지 않습니다.다른 GridBagLayout 정렬 바보

하지만 처음부터 시작해 보겠습니다. 저는 스윙과 인터페이스를 만들고 모듈화하려고합니다. 왼쪽의 메인 메뉴를위한 클래스 (JPanel 확장)가 있습니다. 메뉴는 GridBagLayout에 여러 개의 버튼이 있습니다.

하지만이 layyout을 창 (패널) 상단에 맞출 수 없습니다. Exampel : 패널의 맨 아래 텍스트 필드, 텍스트 필드 아래 버튼 등의 라벨

내 코드를 참조하십시오

public class LeftMenu extends JPanel { 
    public LeftMenu(){ 

    GridBagLayout gbl_panel = new GridBagLayout(); 
    gbl_panel.columnWidths = new int[] { 86, 0 }; 
    gbl_panel.rowHeights = new int[] {32, 32, 32, 32, 32, 32, 32, 32, 32 }; 
    gbl_panel.columnWeights = new double[] { 0.0, Double.MIN_VALUE }; 
    gbl_panel.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0 }; 
    setLayout(gbl_panel); 

    JLabel lblEnterTrunkId = new JLabel("Enter Trunk ID"); 
    GridBagConstraints gbc_lblEnterTrunkId = new GridBagConstraints(); 
    gbc_lblEnterTrunkId.fill = GridBagConstraints.HORIZONTAL; 
    gbc_lblEnterTrunkId.insets = new Insets(0, 0, 5, 0); 
    gbc_lblEnterTrunkId.gridx = 0; 
    gbc_lblEnterTrunkId.gridy = 0; 
    gbc_lblEnterTrunkId.anchor = GridBagConstraints.NORTH; 
    add(lblEnterTrunkId, gbc_lblEnterTrunkId); 
    } 
} 

가 텍스트 필드가 어떤 버튼이 뒤에 다음 상표. 그러나 이것들은 관련이 없다고 생각합니다 ... 만약 그들이 ... 레이블과 거의 같은 것 같습니다 (레이블이 아닙니다 ... 당신이 나를 얻은 것 같아요).

모든 가이드를 읽었습니다. , 모두 GridBagConstraint의 앵커를 가리키고 있습니다. 거기에 .... 있지만 작동하지 않습니다. 패널 중간에 놀랍도록 고맙습니다.

이 문제 않으면

: IST를 SplitPane의 LeftComponent으로 사용 패널 :

public LeftMenu leftpanel = new LeftMenu(); 

splitPaneTrunks.setLeftComponent(leftpanel); 

당신의 도움을 기대하겠습니다.

여기 내 옆 메뉴의 사진입니다 ... 가로로 가운데에 있습니다. 그것이해서는 안된다. 대신 GridBagLayout를 사용

http://i.stack.imgur.com/NsBg2.png

+0

1) 더 도움이 빨리 들어는 [MCVE]을 게시하거나 [짧은, 콘도, 올바른 예 (http://www.sscce.org/). 2) ASCII 아트 또는 GUI의 * 의도 된 * 레이아웃의 간단한 그림을 최소한의 크기로 제공하고 크기를 조정할 수 있으면 더 많은 너비와 높이를 제공하십시오. –

+0

swingx 라이브러리에서 HorizontalLayout을 보여줍니다. –

답변

1

, 당신과 같이, 레이아웃 BorderLayoutJPanel을 사용하여 랩을 만들 수 :

setLayout(new BorderLayout()); 

    JPanel gridBagWrap = new JPanel(); 

    GridBagLayout gbl_panel = new GridBagLayout(); 
    gbl_panel.columnWidths = new int[] { 86, 0 }; 
    gbl_panel.rowHeights = new int[] {32, 32, 32, 32, 32, 32, 32, 32, 32 }; 
    gbl_panel.columnWeights = new double[] { 0.0, Double.MIN_VALUE }; 
    gbl_panel.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0 }; 
    gridBagWrap.setLayout(gbl_panel); 

    JLabel lblEnterTrunkId = new JLabel("Enter Trunk ID"); 
    GridBagConstraints gbc_lblEnterTrunkId = new GridBagConstraints(); 
    gbc_lblEnterTrunkId.fill = GridBagConstraints.HORIZONTAL; 
    gbc_lblEnterTrunkId.insets = new Insets(0, 0, 5, 0); 
    gbc_lblEnterTrunkId.gridx = 0; 
    gbc_lblEnterTrunkId.gridy = 0; 
    gbc_lblEnterTrunkId.anchor = GridBagConstraints.NORTH; 
    gridBagWrap.add(lblEnterTrunkId, gbc_lblEnterTrunkId); 

    add(gridBagWrap, BorderLayout.NORTH); 
여기
+0

답변을 주셔서 감사합니다 ... 제가 틀린 것을 약간 설명했는데 ... 내 텍스트를 편집 한 것 같습니다. 이렇게되어 미안합니다. 나는 페이지의 상단에있는 개체를 정렬 싶지 않아요. 전체 그리드 백은 상단에 정렬되어야합니다. 그리드 가방의 모든 요소는 필요한만큼 정확하게 배치됩니다 ...하지만 첫 번째 객체는 JPanel의 맨 위에 있지 않습니다. – Marcus

+0

@Marcus 스크린 샷을 게시 할 수 있습니까? – nyxaria

+0

그냥 그렇게했는데 ... 여기에 쉽게 추가 될 수 있다는 것을 알지 못했습니다. – Marcus

1

내 사이드 ​​메뉴의 사진입니다 ... 수평으로 중심. 그것이해서는 안된다.

나는 당신이 상단에 표시 구성 요소를 원하는 경우가 수직 중심해서는 안 의미 생각합니다.

어떤 경우에는 문제가 귀하의 weighty 제약이라고 생각합니다. 적어도 하나의 구성 요소에 대해 0이 아니어야합니다. 그렇지 않으면 구성 요소가 수직으로 가운데에 배치됩니다.

How to Use GridBagLayout에 대한 스윙 튜토리얼의 섹션을 읽어보십시오. 이것을 더 자세히 설명 할 weightx/weighty 제약에 대한 섹션이 있습니다.

0

관리자가 GridBagLayout으로 분실 된 것은 놀라운 일이 아닙니다. 실제로는 가장 일반적으로 언급되는 기능 중 하나입니다. GridBagLayout은 90 년대에서 나 왔으며 구성 요소 사이에 픽셀 고정 간격을 사용합니다. 이는 휴대용이 아닙니다. 이 관리자를 사용하면 레이아웃의 각 셀을 지루하게 정의해야합니다. 사람들이 혼란스러워하는 것은 당연합니다.

MigLayout을 사용하는 것이 좋습니다. 그리고 그것을 사용할 수 없다면, GroupLayout. 당신이 MigLayout을 알게되면

package com.zetcode; 

import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import net.miginfocom.swing.MigLayout; 

/* 
Demonstration of MigLayout manager. 
Author: Jan Bodnar 
Website: zetcode.com 
*/ 
public class MigLayoutTrunkEx extends JFrame { 

    public MigLayoutTrunkEx() { 

     initUI(); 
    } 

    private void initUI() { 

     JLabel lbl = new JLabel("Enter Trunk ID"); 
     JTextField textField = new JTextField(10); 

     JButton btn1 = new JButton("A"); 
     JButton btn2 = new JButton("B"); 
     JButton btn3 = new JButton("C"); 
     JButton btn4 = new JButton("D"); 
     JButton btn5 = new JButton("E"); 

     JTextArea area = new JTextArea(20, 25); 
     area.setBorder(BorderFactory.createEtchedBorder()); 

     JLabel statusBar = new JLabel("Ready"); 

     createLayout(lbl, textField, btn1, btn2, btn3, 
       btn4, btn5, area, statusBar); 

     setTitle("MigLayout example"); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    private void createLayout(JComponent... arg) { 

     setLayout(new MigLayout("", "[align center]", "")); 

     add(arg[0], "split 7, flowy"); 
     add(arg[1]); 
     add(arg[2]); 
     add(arg[3]); 
     add(arg[4]); 
     add(arg[5]); 
     add(arg[6]); 
     add(arg[7], "grow, push, wrap"); 
     add(arg[8], "align left, growx, spanx"); 

     pack(); 
    } 

    public static void main(String[] args) { 

     SwingUtilities.invokeLater(() -> { 
      MigLayoutTrunkEx ex = new MigLayoutTrunkEx(); 
      ex.setVisible(true); 
     }); 
    } 
} 

그것은 쉽습니다 : 여기

MigLayout있는 솔루션입니다. 10 분 내지 15 분.

스크린 샷 :

MigLayout example screenshot