Miglayout或替代布局管理器

时间:2016-08-02 06:21:06

标签: java swing layout-manager miglayout

我正在学习Java Swing,并且遇到了我认为是一个有趣的话题,我找不到在线答案。所以我的问题是我有一个使用Miglayout的JFrame,但它没有像我希望的那样工作。我会发布一张图片,说明它目前的样子和我希望它看起来像什么,我也会发布我的代码。此外,我试图将JPanel放在JPanel上,然后使用Miglayout移动它们,但这不起作用。 Miglayout会使用这个还是另一个布局管理器会更好?

EDIT 我希望它看起来像是有一个JTextArea,它旁边有3个JRadioButtons组合在一起,但堆栈底部的单选按钮重新格式化,所以它最终在JTextArea的底部

public SecondFrame() {
    formPanel.setLayout(new net.miginfocom.swing.MigLayout());

    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(500, 525);
    f.setVisible(true);
    f.setLocationRelativeTo(null);

    //by adding the buttons to a group it will only allow you to select 1 button at a time
    buttonGroupLocation.add(sydney);
    buttonGroupLocation.add(melbourne);
    buttonGroupLocation.add(brisbane);

    buttonGroupSeverityLevels.add(lowSeverityBtn);
    buttonGroupSeverityLevels.add(mediumSeverityBtn);
    buttonGroupSeverityLevels.add(highSeverityBtn);
    buttonGroupSeverityLevels.add(criticalSeverityBtn);

    formPanel.add(sydney, "cell 0 0 1 1");
    formPanel.add(melbourne, "cell 0 1 1 1, wrap");
    formPanel.add(brisbane, "cell 0 2 1 1, wrap");

    formPanel.add(issue, "cell 1 0 1 1, wrap");
    formPanel.add(issueArea, "span ");

    formPanel.add(solution, "cell 0 8 1 1, wrap");
    formPanel.add(solutionArea, "cell 0 15 8 1");

    formPanel.add(severity, "cell 0 4 1 1, wrap");
    formPanel.add(lowSeverityBtn, "cell 0 5 1 1");
    formPanel.add(mediumSeverityBtn, "cell 1 5 1 1");
    formPanel.add(highSeverityBtn, "cell 2 5 1 1");
    formPanel.add(criticalSeverityBtn, "cell 3 5 1 1");

    formPanel.add(submit, "cell 0 16 1 1");
    formPanel.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));

    f.add(formPanel);

    formPanel.add(submit, "cell 0 16 1 1");

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

如果MigLayout无法做到,那么其他布局管理员就很难做到。 对于MigLayout,这是小菜一碟。怎么样有几种方法 完成你的任务。我通过放置三个无线电来完成它 按钮进入一个单元格。这可以通过将细胞分成三个来完成 子电池。

package com.zetcode;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;

public class MigLayoutAirportEx extends JFrame {

    public MigLayoutAirportEx() {

        initUI();
    }

    private void initUI() {

        setLayout(new MigLayout());

        ButtonGroup bg = new ButtonGroup();

        JRadioButton sydn = new JRadioButton("Sydney");
        JRadioButton melb = new JRadioButton("Melbourne");
        JRadioButton bris = new JRadioButton("Brisbane");

        bg.add(sydn);
        bg.add(melb);
        bg.add(bris);

        JLabel issue = new JLabel("Issue");
        JTextArea area = new JTextArea(15, 20);
        area.setBorder(BorderFactory.createEtchedBorder());

        add(sydn, "split 3, flowy, aligny top");        
        add(melb);
        add(bris);
        add(issue, "split 2, flowy");
        add(area, "push, grow, wrap");

        pack();

        setTitle("ARE - Airport Retail Enteprises");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }    


    public static void main(String[] args) {

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

该示例创建了您遇到问题的UI的上半部分。

  

此外,我试图将JPanel放在JPanel上然后移动它们   使用Miglayout但是没有用。

这些是糟糕的布局管理者继承的坏习惯。使用MigLayout,您不需要任何其他面板与其他布局管理器。强大的布局管理员不需要这个。

以下是截图:

enter image description here