2014-04-11 2 views
1

는 그와 같은 응용 프로그램의 레이아웃을 개발하기 위해 노력하고있어 :MigLayout 열 제약

* +------------------+--------+ 
* |     |  | 
* |     |  | 
* |     |  | 
* |  70%  | 30% | 
* |     |  | 
* |     |  | 
* |     |  | 
* |     |  | 
* |     |  | 
* +------------------+--------+ 

이 작업을 수행하려면, 내가 MigLayout을 사용하고 있습니다. 이 cheat sheet에 따르면 열 무게를 설정하기 위해 우리는 [weight]을 사용합니다. 그러나, 어떻게 든 작동하지 않습니다. 내 코드를 살펴 :

package com.test; 

import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.border.TitledBorder; 

import net.miginfocom.swing.MigLayout; 

public class MainWindow { 

private JFrame frame; 
private JTextField iterationsTextField; 
private JTextField populationSizeTextField; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       MainWindow window = new MainWindow(); 
       window.frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the application. 
*/ 
public MainWindow() { 
    initialize(); 
} 

/** 
* Initialize the contents of the frame. 
*/ 
private void initialize() { 
    frame = new JFrame(); 
    frame.setBounds(100, 100, 450, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(new MigLayout("", "[grow 70][grow 30]", "[grow]")); 

    JPanel canvasPanel = new JPanel(); 
    frame.getContentPane().add(canvasPanel, "cell 0 0,grow"); 
    canvasPanel.setLayout(new MigLayout("", "[]", "[]")); 

    JPanel settingsPanel = new JPanel(); 
    settingsPanel.setBorder(new TitledBorder(null, "Settings", TitledBorder.LEADING, TitledBorder.TOP, null, null)); 
    frame.getContentPane().add(settingsPanel, "cell 1 0,grow"); 
    settingsPanel.setLayout(new MigLayout("", "[][grow]", "[][]")); 

    JLabel iterationsLabel = new JLabel("Iterations"); 
    settingsPanel.add(iterationsLabel, "cell 0 0,alignx trailing"); 

    iterationsTextField = new JTextField(); 
    iterationsTextField.setText("1000"); 
    settingsPanel.add(iterationsTextField, "cell 1 0,growx"); 
    iterationsTextField.setColumns(10); 

    JLabel populationSizeLabel = new JLabel("Population"); 
    settingsPanel.add(populationSizeLabel, "cell 0 1,alignx trailing"); 

    populationSizeTextField = new JTextField(); 
    settingsPanel.add(populationSizeTextField, "cell 1 1,growx"); 
    populationSizeTextField.setColumns(10); 
} 

}

나는 settingsPanel 30 %이어야한다 동안이 구성 "[grow 70][grow 30]" 패널 canvasPanel를 사용하여 프레임을 설정하면, 화면 너비의 70 %가되어야한다고 생각합니다. 최종 결과를 살펴 : 당신이 볼 수 있듯이, settingsPanel가 WAY 이상 canvasPanel보다

enter image description here

. 내가 놓친 게 있니?

미리 감사드립니다.

grow 70 

하나의 제약 조건이며, 숫자가 추가 공간을 얻을 수있는 컬럼의 열망의 상대적 무게를 정의

+1

유전자 알고리즘 응용 프로그램을 개발하고 있습니까? :) – HCarrasko

+2

@Hector ahahha, 네! :) – Doon

+2

정확하게 기억하면'[grow, 70 %]' – kleopatra

답변

5

귀하의 문제는 제약 구문의 오해입니다. 귀하의 예제에서 그것을 보시려면, 프레임 너비를 늘리십시오 : 추가 너비가 두 열 사이에 70 : 30으로 배분됩니다.

grow, 70% 

은 두 가지 제약 조건이 있습니다. 첫 번째는 성장 동작 (기본 가중치는 100)을 정의하고 두 번째 제약 조건은 너비를 백분율로 정의합니다.