当前位置: 首页 > news >正文

【老白学 Java】Border 布局管理器

Border 布局管理器

码老白
文章来源:《Head First Java》修炼感悟。

当你向面板中放入各种各样组件时,有没有感觉到有些不同寻常。 这些组件能够很有条理的进行排列,它们是根据什么确定自己的位置和大小的呢? 本文就来聊一聊组件布局管理器 (Layout Manager)。

布局管理器

之所以组件排列得有条不紊, 实际上是背后有一个家伙在默默地做着工作,这个家伙我们叫它布局管理器。 在 Swing 的组件库中,所有容器类组件(如 Frame、Panel 等等)都有各自的布局管理器,而布局管理器又分为几种不同类型和不同的布局策略。

容器类组件中可以加入其它组件,并按照它的布局策略排列容器中的子组件;而这个容器组件又可以成为其它容器组件的子组件,并按照它的父组件的布局策略进行排列。 简单地说,组件可以嵌套。

布局管理器分为三种,BorderLayoutFlowLayoutBoxLayout,下面先来看看 Border 布局对组件排列的影响。

BorderLayout

BorderLayout 是容器组件的默认布局管理器,它将容器组件划分为五个区域:East、West、South、North、Center,每个区域只能放入一个组件。
BorderLayout区域划分
接下来演示一下在不同区域添加组件的情形,首先是 East 区域:

import javax.swing.*;
import java.awt.*;
public class BorderLayoutManager {public void go() {JFrame frame = new JFrame();// JButton button = new JButton("click me");JButton button = new JButton("click like you mean it");frame.getContentPane().add(BorderLayout.EAST, button);frame.setSize(300, 300);frame.setVisible(true);}public static void main(String[] args) {new BorderLayoutManager().go();}
}

注意,添加到 East 和 West 区域的组件会根据组件内容自动适应宽度,而高度父类容器高度一致。比如 Button 文字较多的组件要宽于文字内容较少的组件,而 Button 高度与父类容器高度保持一致。 下面是运行时的情形:
East加入组件East加入组件2

然后在 North 区域添加 Button:

import javax.swing.*;
import java.awt.*;
public class BorderLayoutManager {public void go() {JFrame frame = new JFrame();JButton button = new JButton("there is no spoon...");frame.getContentPane().add(BorderLayout.NORTH, button);frame.setSize(300, 300);frame.setVisible(true);}public static void main(String[] args) {new BorderLayoutManager().go();}
}

与 East 和 West 类似,添加到 South 和 North 区域的组件,与父类容器宽度一致,而高度根据 Button 文字内容的高度决定。 下面是运行时的情形:
North区域加入ButtonNorth加入Button加大字号

最后在五个区域都加入 Button:

import javax.swing.*;
import java.awt.*;
public class BorderLayoutManager {public void go() {JFrame frame = new JFrame();JButton button_e = new JButton("East");JButton button_w = new JButton("West");JButton button_n = new JButton("North");JButton button_s = new JButton("South");JButton button_c = new JButton("Center");frame.getContentPane().add(BorderLayout.EAST, button_e);frame.getContentPane().add(BorderLayout.WEST, button_w);frame.getContentPane().add(BorderLayout.NORTH, button_n);frame.getContentPane().add(BorderLayout.SOUTH, button_s);frame.getContentPane().add(BorderLayout.CENTER, button_c);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300, 300);frame.setVisible(true);}public static void main(String[] args) {new BorderLayoutManager().go();}
}

Center加入Button
可以看到,中心区域只能是周围四个区域分配后剩余的空间。 如果添加组件时没有指定区域,则默认添加到 Center 区域。 假如只有 Center 区域添加了组件,这个组件会充斥整个面板,就像这样:

import javax.swing.*;
import java.awt.*;
public class BorderLayoutManager {public void go() {JFrame frame = new JFrame();JButton button_c = new JButton("哈哈~我独占整个面板");frame.getContentPane().add(BorderLayout.CENTER, button_c);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300, 300);frame.setVisible(true);}public static void main(String[] args) {new BorderLayoutManager().go();}
}

独占面板

BorderLayout 布局特点

  • 分为五个区域,每个区域只能放入一个组件;
  • 组件的宽度和高度,除了与自身有关还与父类容器的宽度和高度有关;
  • 优先确定 South 和 North 区域组件大小;
  • 然后确定 East 和 West 区域组件大小;
  • 最后确定 Center 区域组件大小;
  • 如果仅有 Center 区域加入组件,组件会充斥整个面板。

内容预告

下一篇文章继续讨论另一种布局管理器 FlowLayout,它会有怎样的布局策略,老白届时为你揭晓。


《 上一篇 简单位移动画下一篇 Flow 布局管理器 》

http://www.mrgr.cn/news/82225.html

相关文章:

  • 论文泛读《LPFHE: Low-Complexity Polynomial CNNs for Secure Inference over FHE》
  • Dubbo扩展点加载机制
  • Time-vulnhub打靶-Chronos
  • xdoj isbn号码
  • LLM(十二)| DeepSeek-V3 技术报告深度解读——开源模型的巅峰之作
  • 使用MPTCP+BBR进行数据传输,让网络又快又稳
  • C++并发:在线程间共享数据
  • spring boot 异步线程池的使用
  • SpringCloud源码分析-Lettue Redis
  • shell脚本的【算数运算、分支结构、test表达式】
  • 03-类和对象(上)
  • SQL偏移类窗口函数—— LAG()、LEAD()用法详解
  • 单片机-蜂鸣器实验
  • vue视频录制 限制大小,限制时长
  • 思科无线控制器 AC5508 初始化
  • 操作系统课后题总复习
  • SpringCloud源码-Ribbon
  • Docker Compose编排
  • spring boot通过文件配置yaml里面的属性
  • Spring实现Logback日志模板设置动态参数
  • 19712 数字接龙
  • TTL 传输中过期问题定位
  • FOC控制原理7-源码解析2-系统滴答定时器中断
  • 使用ebooklib制作符合epub3规范的epub文件
  • C++语言编程————C++数据类型
  • 解决virtualbox克隆ubuntu虚拟机之后IP重复的问题