/ / Restrição de coluna MigLayout - java, swing, gerenciador de layout, miglayout

Restrição da coluna MigLayout - java, swing, gerenciador de layout, miglayout

Eu estou tentando desenvolver um layout de aplicativo assim:

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

Para fazer isso, estou usando o MigLayout. folha de dicas, para definir o peso da coluna, devemos usar [weight]. No entanto, não está funcionando de alguma forma. Dê uma olhada no meu código:

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);
}

}

Eu acho que definindo o quadro usando essa configuração "[grow 70][grow 30]" o painel canvasPanel deve ser de 70% da largura da tela, enquanto settingsPanel deve ser de 30%. Dê uma olhada no resultado final:

insira a descrição da imagem aqui

Como você pode ver, o settingsPanel é muito mais tempo do que o canvasPanel. Estou esquecendo de algo?

Desde já, obrigado!

Respostas:

5 para resposta № 1

Seu problema é um mal-entendido da sintaxe de restrição:

grow 70

é uma restrição única, o número define um peso relativo da ânsia da coluna para obter extra espaço. Para vê-lo no seu exemplo, aumente a largura do quadro: a largura adicional é distribuída 70: 30 entre as duas colunas.

grow, 70%

são duas restrições, a primeira definindo o comportamento de crescimento (com um peso padrão de 100) e a segunda definindo a largura como uma porcentagem.