Java Swing JPanel 使用 BorderLayout 和 Flow

  今天我们将学习java swing的JPanel 的创建以及 BorderLayout 和 FlowLayout这两个布局类的详解,这篇文章主要涉及以下几个方面。

  1、什么是JPanel,并创建JPanel。

  2、JPanel的两个布局类BorderLayout和FlowLayout的详解。

  什么是JPanel?简单地说, JPanel是一个简单的容器类,它为应用程序添加其他组件提供了空间。JPanel有自己的布局管理器,与包含它的JFrame分开。

  我这边又创建了一个新的java项目,名为swing_jpanel,并添加了一些swing代码来创建一个新的JFrame。

  

  JFrame是我们在上一个文章中讨论过的组件,没有经验的可以进我的主页先去看看那篇文章。

  在开始JPanel 之前我们先看一下JPanel的构造函数。

  JPanel的构造函数(也称为构造方法)总共有四种,见下图:

  

  默认的JPanel也就是 new JPanel()等于Flow JPanel,如果你看过我之前的文章,就知道JFrame有一个默认的边框(BorderLayout)布局管理器,而默认的JPanel的布局管理器是一个流(FLowLayout)布局。

  注意这里的默认布局,我们都知道,在没有指定任何布局的情况下,你往JFrame中添加一个Jbutton,那么这个Jbutton 将占据这个JFrame的全部面板,类似下面这样。

  

  看起来很丑是不是 - -,哈哈,我也想吐槽来着。

  这是默认没有添加任何布局的JFrame代码。

  下面是这个超大按钮的界面源码

  

  所以你如果是在JFrame中使用BorderLayout这个布局管理器,我们不必特别指定任何参数就可以使用,因为它们是默认值,但是如果我们想要更改与布局管理器相关的任何参数,我们就必须要显式地指定这些参数。

  接下来再来看看JPanel的默认布局,

  

  再来看看形成这个面板的代码

  

  在这个代码中,我们并没有显式的设定任何布局,而它默认的形成了上面的样式,也就是流式布局。下面,让我们为JPanel设置另外一种布局管理器,也就是BorderLayout,或者叫边框、边界布局管理器。

  在这里我们可以指定添加到JPanel中的组件的对齐方式以及水平和垂直的差距。

  

  注意:

  new BorderLayout的参数 hgap 和 vgap 的意思分别指的是 水平间距,以及垂直间距。

  hgap是水平间距,vgap是垂直间距。

  注:

  水平间距 指的是 横向 坐标点 间距 ,也就是 X 轴 距离

  垂直间距 指的是 纵向 坐标点 间距 ,也就是 Y 轴 距离

  

  我们来看这样一段代码。

  

  为了更大的看出效果,水平间距我调到30,垂直间距我调到 1

  看结果

  

  (1)红色部分都是间距,为了方便我将布局颜色调整为了红色。

  (2)Button 2 与 Button 4 之间的这个宽度,也就是水平间距为 30

  (3)我们再测量一下 间隔单位 是否 确切为像素

  (4)首先获取 button 2 左侧边栏的距离,相对于桌面屏幕边缘的,X轴距离为 705

  (5)然后获取 button 4 右侧边栏的距离,相对于桌面屏幕边缘的,X轴距离为 735

  (6)可以确定,这个距离的单位为 像素点,也就是间隔 多少多少个像素点。

  我们再来看 JPanel 的流式布局,这一次我们要显式的指定它的参数。

  前面讲了,JPanel的布局默认是流式的,而流式布局的默认选择是居中的,我们想要调整流式布局要怎么做呢?

  我们需要第二种构造方式,new FlowLayout(int align),并向其中传递一个参数,这个参数为 int类型,参数 代表了 控件的对齐方式:

  以下是参数列表

  

  我们来应用尝试一下。

  这种是Left

  

  这种是Right

  

  这种为Leading

  

  这种是Trailing

  

  要注意的是 leading 和 left是同样的;trailing 与 right是同样的。

  Leading表示开始的位置,Trailing表示结束的位置。

  而 FlowLayout的第三个构造函数,参数分别代表起始位置,水平间隔,垂直间隔。关于这个在上面已经讲过,我们这边不再累述。

  这篇文章到这里就结束了,如果对你有帮助,还希望你点赞收藏加关注!如果有其他问题或者建议可以在评论区留言指出。

  本文使用系统:win7 64

  Java开发环境:Eclipse 2022-10-19

  JDK版本:JDK17

  举报/反馈