【问题标题】:resizing window with gridBagLayout [duplicate]使用 gridBagLayout 调整窗口大小 [重复]
【发布时间】:2018-03-27 18:53:51
【问题描述】:

尽管在 Google 上搜索了很多次,但我被困在这上面很长一段时间,我不知道该怎么做。我的问题是,我有一个程序,其中有一个从 JFrame 获得的容器。问题是,我将 menuBar 正确放置在两个按钮的下方,但是当我最大化窗口时,它会出现一个令人讨厌的空白区域,我不想在那里。如果我不最大化窗口,则组件可以很好地放置,如下所示:

但是当我最大化窗口时,出现了烦人的空间(红色标记的那个):

我想要的是菜单栏和按钮,像第一张图片一样停留在那个角落。菜单栏和按钮的gridbaglayout代码如下:

//MenuBar
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.weightx = 0.5;
    gbc.weighty = 0.0; // si no ponemos esto la barra NO se queda anclada en la esquina
    gbc.gridx = 0;
    gbc.gridy = 0;

    //gbc.anchor = GridBagConstraints.NORTHWEST;
    //gbc.gridwidth = 2; 
    //gbc.gridheight = 1;
    menuBar.setBorder(BorderFactory.createLineBorder(Color.black));
    pane.add(menuBar, gbc);
//buttons
    gbc.gridx = 0;
    gbc.gridy = 1;
    gbc.anchor = GridBagConstraints.LINE_START;//reseteamos su valor 
    gbc.gridwidth = GridBagConstraints.REMAINDER; // con esto indicamos que va a ser el ultimo componente de esa fila
    gbc.weightx = 0.0;
    gbc.weighty = 0.0;
    gbc.fill = GridBagConstraints.NONE;
    gbc.gridwidth = 2;
    gbc.gridheight = 1;
    panel.setBorder(BorderFactory.createLineBorder(Color.black)); //luego quitar es para ver lo que ocupaba el panel
    pane.add(panel, gbc);

【问题讨论】:

  • 通过转发问题避免浪费人们的时间。你在上一个问题中得到了答案。您完全忽略了给出的建议,并且在这里重复了完全相同的建议。您获得了有关如何使用菜单的 Swing 教程的链接,因此您可以阅读该教程并复制演示代码和实验。

标签: java swing gridbaglayout


【解决方案1】:
pane.add(menuBar, gbc);

这不是您添加JMenuBar 的方式,而是使用JFrame#setMenuBar(...) 添加它。例如:

frame.setMenuBar(menuBar);

然后按钮应该按需要排列

【讨论】:

  • 谢谢,它可以部分工作。我的意思是 JMenuBar 卡在角落里,但按钮没有,还有一件事,为什么 jmenubar 是以这种方式添加的?为什么我不能将它添加到容器中?
  • 您可以将其添加到容器中,但用户习惯将JMenuBar 放在窗口顶部,而不是在中间。但是您可以添加它们。对于按钮,请提供正确的minimal reproducible example,因为我们无法提供完整的帮助。删除所有与问题无关的不必要代码,例如图像、ActionListeners 等,只需使用JButtons 和JMenuBar 创建一个简单的 GUI,以便我们可以复制您的问题并帮助您解决它。您能否提供一张图片,说明您希望在调整大小后如何放置按钮? @victor26567
  • 另外,根据docs,这是将JMenuBar 添加到JFrame @victor26567 的正确方法
  • 这个建议和教程链接已经在几个小时前 OP 关于这个主题的上一个问题中提供:stackoverflow.com/questions/49510303/… 只是想我会让你知道,这样你就不会再浪费时间了,跨度>
  • 酷,感谢@camickr 提醒我在回答之前检查低代表用户的个人资料以检查此类内容...
猜你喜欢
  • 2021-09-20
  • 1970-01-01
  • 2012-10-29
  • 2016-04-07
  • 1970-01-01
  • 2022-06-10
  • 2014-10-01
  • 1970-01-01
  • 2011-11-15
相关资源
最近更新 更多