首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MigLayout列约束

MigLayout列约束
EN

Stack Overflow用户
提问于 2014-04-11 00:55:43
回答 1查看 1.7K关注 0票数 1

我正在尝试开发这样的应用程序布局:

代码语言:javascript
复制
 * +------------------+--------+
 * |                  |        |
 * |                  |        |
 * |                  |        |
 * |       70%        |  30%   |
 * |                  |        |
 * |                  |        |
 * |                  |        |
 * |                  |        |
 * |                  |        |
 * +------------------+--------+

为此,我使用MigLayout。根据这个备忘单,为了设置列的权重,我们应该使用[weight]。然而,不知何故,它是行不通的。看看我的代码:

代码语言:javascript
复制
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);
}

}

我认为使用这个配置"[grow 70][grow 30]"设置框架面板canvasPanel应该是屏幕宽度的70%,而settingsPanel应该是30%。看一看最终结果:

如您所见,settingsPanelcanvasPanel长得多。我是不是遗漏了什么?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-12 08:23:23

您的问题是对约束语法的误解:

代码语言:javascript
复制
grow 70

是单个约束,该数字定义了列的相对权重,以获得额外的空间。要在您的示例中看到它,请增加框架的宽度:附加宽度在两列之间分布70 : 30。

代码语言:javascript
复制
grow, 70%

有两个约束,第一个约束定义增长行为(默认权重为100),第二个约束将宽度定义为百分比。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23001696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档