문제

내가 작업중 인 프로젝트를 위해 사이드 바를 그려려고합니다. BoxLayout의 한계에 좌절했기 때문에 Gridbaglayout을 사용하기로 결정했습니다. 누군가 내가 무엇을 잘못하고 있는지 설명 할 수 있습니까? 내가 원하는 것은 사이드 바에 두 개의 jpanel을 포함하는 것입니다. 내가 가진 코드는 상단 대신 사이드 바를 반쪽으로 내려 놓습니다. 누군가 내가 여기서 내가 놓친 것을 설명 할 수 있습니까?

    JPanel sideBar = new JPanel();
    sideBar.setBounds(0, 0, 180, (int)this.getBounds().getHeight());
    sideBar.setLayout(new GridBagLayout());


    JPanel optionBar = new JPanel();
    optionBar.setBorder(BorderFactory.createTitledBorder("Box1"));
    optionBar.setLayout(new GridBagLayout());


    JPanel buttonBar = new JPanel();
    buttonBar.setBorder(BorderFactory.createTitledBorder("Options"));
    buttonBar.setLayout(new GridBagLayout());


    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0;
    c.ipady = 5;
    c.insets = new Insets(10,0,0,0);


    JButton simplify;
    simplify = new JButton("Open");
    simplify.addActionListener( this.listener );
    c.gridy = 0;
    buttonBar.add(simplify, c);

    JButton mergeButton;
    mergeButton = new JButton("Close");
    mergeButton.addActionListener( this.listener );
    c.gridy = 1;
    buttonBar.add(mergeButton, c);

    JButton splitButton;
    splitButton = new JButton("Merge");
    splitButton.addActionListener( this.listener );
    c.gridy = 2;
    buttonBar.add(splitButton, c);

    c.insets = new Insets(0,5,5,5);
    c.gridy = 0;
    sideBar.add(optionBar, c);

    c.gridy = 1;
    c.ipadx = 70;
    sideBar.add(buttonBar, c);

    return(sideBar);
도움이 되었습니까?

해결책

Gridbaglayout은 구성 요소가 요구하는 충분한 수직 공간 만 할당하여 나머지는 비워집니다. 사이드 바 구성 요소가 수직으로 중앙에있는 것을보고 싶습니까?

구성 요소를 "푸시"하려면 수직 무게를 설정해야합니다. 당신이 설정하면 weighty 마지막 구성 요소에서 1.0으로 제한이 있으면 해당 구성 요소의 남은 수직 공간을 모두 가져 와서 나머지를 상단으로 밀어냅니다. (마지막 패널을 GridBagConstraints.NORTH).

노력하다 c.weighty = 1.0 ~ 전에 sideBar.add(buttonBar, c);

다른 팁

HTML에 익숙하거나 더 편한 경우 사용할 수 있습니다. Table2Gridbag. 레이아웃 설명 (HTML 테이블)을 취하고 Gridbaglayout Manager를 구성하기위한 동등한 레이아웃 설명으로 변환하는 작은 콘솔 도구입니다.

내가 가진 코드는 상단 대신 사이드 바를 반쪽으로 내려 놓습니다.

글쎄, 당신은 그것을 읽는 것으로 시작해야합니다 스윙 튜토리얼 레이아웃 관리자를 올바르게 사용하는 방법을 배웁니다. BoxLayout은 제약 조건을 지정하는 방법을 배울 필요가 없기 때문에 Gridbaglayout보다 훨씬 쉽습니다. 그러나 Gridbaglayout을 사용하려면 "Gridbaglayout 사용 방법"에 대한 섹션을 읽으십시오. "Weightx and Weighty"제약 조건을 다루는 섹션에 집중할 수 있습니다. 문제를 해결하는 데 도움이되는 제한된 지식을 바탕으로합니다.

또한 레이아웃 관리자를 사용할 때 setBounds () 또는 setSize ()를 사용하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top