当前位置: 首页 > 知识库问答 >
问题:

在JavaSwing中使用MigLayout

宿丰
2023-03-14

我很好奇,在放置组件时,如何使用miglaway在网格上均匀分布组件:

例如,如果我在一个按钮组中放置四个JRadioButton以跨越3行2列(2,3),然后放置三个JButton,则分布的权重是不相等的,我最终会得到以下结果:

如图所示,A和B的大小相同,C保留剩余的空间:我希望A、B、C在垂直方向上等于三分之一。

如果这在GridBagLayout中是可能的,我也可以利用它,但是我在任何一种布局中都遇到了相同的问题。

(我希望所有按钮都不考虑按钮组、小数点和等于相同的大小)

非常感谢。

编辑:(感谢Andrew的修复)以下是使用MigLayout添加按钮的示例html" target="_blank">代码:

    bp.add(buttonGroup1, "grow, span 2 3");
    bp.add(btnQuot );
    bp.add(btnMod);
    bp.add(btnA);
    bp.add(emptyBtn1, "grow");
    bp.add(emptyBtn2, "grow");
    bp.add(emptyBtn3, "grow");
    bp.add(emptyBtn4, "grow");
    bp.add(emptyBtn5, "grow, wrap");
    bp.add(emptyBtn6, "grow");
    bp.add(emptyBtn7, "grow");
    bp.add(btnB, "grow");
    bp.add(btnBackSpace);
    bp.add(btnClrEntr);
    bp.add(btnClear);
    bp.add(btnPlMns);
    bp.add(btnSqrt, "grow,wrap");
    bp.add(emptyBtn8, "grow");
    bp.add(emptyBtn9, "grow");
    bp.add(btnC, "grow");
    bp.add(btn7, "grow");
    bp.add(btn8, "grow");
    bp.add(btn9, "grow");
    bp.add(btnDiv, "grow");
    bp.add(btnPerc, "grow, wrap");
    bp.add(buttonGroup2, "span 2 3");
    bp.add(emptyBtn10, "grow");
    bp.add(emptyBtn11, "grow");
    bp.add(btnD, "grow");
    bp.add(btn4, "grow");
    bp.add(btn5, "grow");
    bp.add(btn6);
    bp.add(btnMult, "grow");
    bp.add(btnOneOverX, "wrap");
    bp.add(emptyBtn12, "grow");
    bp.add(emptyBtn13, "grow");
    bp.add(btnE, "grow");
    bp.add(btn1, "grow");
    bp.add(btn2, "grow");
    bp.add(btn3);
    bp.add(btnSub, "grow");
    bp.add(btnEquals, "grow,wrap, span 1 2");
    bp.add(emptyBtn14, "grow");
    bp.add(emptyBtn15, "grow");
    bp.add(btnF, "grow");
    bp.add(btn0, "grow, span 2");
    bp.add(btnDecimal, "grow");
    bp.add(btnPlus, "grow");

问题很可能是试图将按钮组表示为2x3单元,因此我将在下次可能时尝试使用多个面板。

共有1个答案

曾典
2023-03-14

您可以使用MigLayout做到这一点。查看“合并和拆分单元格”部分。也不要害怕使用多个JPanels。

以下是您正在尝试做的事情的简化示例:

public class MigSample
{   
    public static void main (String [] args)
    {
        JFrame frame = new JFrame();

        // create radio buttons
        JRadioButton radio1 = new JRadioButton("1");
        JRadioButton radio2 = new JRadioButton("2");
        JRadioButton radio3 = new JRadioButton("3");
        JRadioButton radio4 = new JRadioButton("4");

        // create buttons
        JButton buttonA = new JButton("A");
        JButton buttonB = new JButton("B");
        JButton buttonC = new JButton("C");
        JButton buttonD = new JButton("D");
        JButton buttonE = new JButton("=");

        // create the panel that contains the radio buttons
        JPanel radioPanel = new JPanel(new MigLayout("wrap 1")); // wrap 1 let's us avoid adding the wrap constraing to every component
        radioPanel.add(radio1);
        radioPanel.add(radio2);
        radioPanel.add(radio3);
        radioPanel.add(radio4);

        // create the panel that contains the other buttons
        JPanel buttonPanel = new JPanel(new MigLayout("filly, wrap 2")); // filly tells it to take up all the vertical space
        // add growy to all components so they will fit the cell height
        buttonPanel.add(buttonA, "growy");
        buttonPanel.add(buttonD, "growy");
        buttonPanel.add(buttonB, "growy");
        buttonPanel.add(buttonE, "span 1 2, growy"); // span 1 2 tells this component to span 1 column and 2 rows
        buttonPanel.add(buttonC, "growy");

        // create the main contentPane
        JPanel contentPane = new JPanel(new MigLayout("filly")); // again, we want to fill the vertical space so the 2 panels will have the same height
        contentPane.add(radioPanel);
        contentPane.add(buttonPanel, "growy");

        frame.setContentPane(contentPane);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}
 类似资料:
  • 当我尝试运行一个新的Swing应用程序时,我遇到了一些重大问题。我使用的是NetBeans 8.1、JDK版本1.8和OS Windows 10。 所以每次我试图打开一个新的Swing项目(不管它是应用项目还是EA),并且我运行它,NetBeans都会正确部署它,但是Swing窗口没有打开,在NetBeans的状态栏中它只是显示正在运行。我等了几分钟,然后我不得不停止构建,因为什么都没发生。当我在

  • 我有一个要求,我需要采取我的一些文件的副本,并把它放在内部服务器。这需要定期发生,比如每天晚上8点。这也是一个Swing应用程序,在我的本地PC上运行。我知道我可以使用Java计划任务,或者使用,或者更好的。 但是,问题来了。没有人会仅仅为了这个调度器就让计算机开机24小时。据我所知,如果有人重启电脑,Java调度器也会死掉。相反,一旦任务计划完成,如果计算机已打开,则计划的任务应在每天晚上8点进

  • 我想用JavaSwing创建以下GUI。 由于我对Java Swing没有足够的经验,所以我不确定如何准确地重新创建该GUI。 我尝试过使用GridLayout,如下所示: 我已经尝试过其他的布局管理器,但是由于我缺乏经验,我无法得到任何与我想要实现的图形用户界面相类似的东西。 我可能不得不使用GridBagLayout,但我已经尝试过了,根本无法完成任何事情。我不确定如何确切地使用GridBag

  • 嘿,伙计们,我正在制作这个游戏,我想知道如何在右边制作另一个专栏。你会从视觉上更好地理解: 这就是我现在做的: 但是如果我再加一个按钮,它就会垂直向下。我如何使它水平到中间,这样我就可以使我的井字游戏。 代码:

  • 这是我当前的目录结构(包含在目录中): 基本上来自,我正在尝试访问。 我尝试了很多变体来工作,现在我只有: 我尝试改变路径使用,使用函数,但似乎没有工作。 当我使用生成jar并运行jar文件时,它不会显示图像。 我执行

  • 你可以在截图中看到,有一个JPanel分为两个区域,左区和右区。左侧区域有许多文本链接。当我单击SLA Criteria链接时,它将弹出SLA Criteria窗口。弹出窗口是JFrame对象。 现在,我试图将弹出窗口放在JPanel的右侧区域,这意味着不再有弹出窗口,即当我单击SLA标准链接时,其内容将显示在JPanel的右侧区域。JPanel正确区域的现有内容将不再使用。这个概念与java a