在Java中使用布局

在Java中使用布局,java,swing,layout,awt,layout-manager,Java,Swing,Layout,Awt,Layout Manager,我有一个JFrame布局BorderLayout,我使用BorderLayout.CENTER添加JPanels 我有一个JPanel(使用中心添加),它使用GridLayout放置4个按钮 这些按钮很大,占据了整个屏幕。或者,我按如下方式进行: 我有一个布局为null的JFrame,我设置JPanel边界并添加它们 我有一个JPanel: 它设置了自己的边界,所以它占据了屏幕中心的1/2,只有屏幕的1/8 高 它使用网格布局添加按钮,并生成一行漂亮的按钮 显然,第二个选项看起来更好,但我希

我有一个
JFrame
布局
BorderLayout
,我使用
BorderLayout.CENTER添加
JPanel
s 我有一个
JPanel
(使用中心添加),它使用
GridLayout
放置4个按钮

这些按钮很大,占据了整个屏幕。或者,我按如下方式进行:

  • 我有一个布局为null的JFrame,我设置JPanel边界并添加它们
  • 我有一个JPanel: 它设置了自己的边界,所以它占据了屏幕中心的1/2,只有屏幕的1/8 高
  • 它使用网格布局添加按钮,并生成一行漂亮的按钮

显然,第二个选项看起来更好,但我希望符合规范,并始终使用布局。。。如何混合自定义和布局?(或者干脆解决我的问题)

当您向
BorderLayout.CENTER
添加一个component时,它将扩展以填充容器中未被
BorderLayout
其他部分使用的剩余空间。此外,一次只能将一个组件添加到
BorderLayout.CENTER
。后续添加将替换先前的组件


至于解决你的确切问题,我建议你先看看。这将为您提供Swing API中可用布局的入门知识。Oracle还为每个布局提供了更深入的教程。通过嵌套布局,您可以在充分利用其功能的同时为UI提供任何您想要的外观,尤其是在调整窗口大小或以其他方式更改窗口时自动计算。

当您向
BorderLayout.CENTER添加组件时,它将扩展以填充容器中未被
BorderLayout
其他部分使用的剩余空间。此外,一次只能将一个组件添加到
BorderLayout.CENTER
。后续添加将替换先前的组件


至于解决你的确切问题,我建议你先看看。这将为您提供Swing API中可用布局的入门知识。Oracle还为每个布局提供了更深入的教程。通过嵌套布局,您可以在充分利用UI功能的同时,为UI提供任何您想要的外观,尤其是在调整窗口大小或以其他方式更改窗口时的自动计算。

好的,谢谢,我会确定这一点。但出于好奇,我这样做真的有什么不对吗?它已经使用了相对部分,如果我让它在重新调整窗口大小时更新,那么,它似乎可以完美地工作。。。因此,如果我只是为了符合stubburn的要求,那么使用setLayout(null)除了用户易用性之外,还有什么“不好”的地方吗?“……它似乎工作得完美无缺……”代码在哪里?@csga5000并非每个系统都是一样的。系统具有不同的字体和字体度量以及分辨率差异。允许布局管理器管理这些差异,然后为您可能达到的每一种可能的边缘情况编写代码,这要容易得多……这是一个好的观点。使用布局,因为用户容易?是的,但也因为这些方面的实用性。我可能最终会和GridBagLayout打成一片,这似乎有很多我想做的事情的潜力。“GridBagLayout,它似乎有很多我想做的事情的潜力。”这通常比试图让一个布局适合所有用途要简单得多。好的,谢谢,我会确定的。但出于好奇,我这样做真的有什么不对吗?它已经使用了相对部分,如果我让它在重新调整窗口大小时更新,那么,它似乎可以完美地工作。。。因此,如果我只是为了符合stubburn的要求,那么使用setLayout(null)除了用户易用性之外,还有什么“不好”的地方吗?“……它似乎工作得完美无缺……”代码在哪里?@csga5000并非每个系统都是一样的。系统具有不同的字体和字体度量以及分辨率差异。允许布局管理器管理这些差异,然后为您可能达到的每一种可能的边缘情况编写代码,这要容易得多……这是一个好的观点。使用布局,因为用户容易?是的,但也因为这些方面的实用性。我可能最终会和GridBagLayout打成一片,这似乎有很多我想做的事情的潜力。“GridBagLayout,它似乎有很多我想做的事情的潜力。”这通常比试图使一个布局适合所有用途要简单得多。