运用 BoxLayout 和Box结合进行 Swing 控件布局(转)

JavaSwing_1.4: BoxLayout(箱式布局) BoxLayout,箱式布局管理器。它把若干组件按水平或垂直方向依次排列放置。Swing 提供了一个实现了 BoxLayout 的容器组件Box。使用 Box 提供的静态方法,可快速创建水平/垂直箱容器(Box),以及填充组件之间空隙的不可见组件。用水平箱和垂直箱的组合嵌套可实现类似于 GridBagLayout 的效果,但没那么复杂。 阅读详情

原地址:https://www.ibm.com/developerworks/cn/java/j-lo-boxlayout/index.html

运用 BoxLayout 进行 Swing 控件布局

陈 怡平
2012 年 12 月 03 日发布

 

引言

在用户使用 Java Swing 进行用户界面开发过程中,会碰到如何对 Java Swing 的控件进行布局的问题。Swing 的控件放置在容器 (Container) 中,容器就是能够容纳控件或者其它容器的类,容器的具体例子有 Frame、Panel 等等。容器需要定义一个布局管理器来对控件进行布局管理,Swing 当中提供的主要的布局管理器有 FlowLayout、BorderLayout、BoxLayout、GridLayout 和 GridBaglayout, 它们的主要特点如表 1 所示:

表 1. Swing 中的一些主要布局管理器的比较

布局管理器特点
FlowLayout把控件按照顺序一个接一个由左向右的水平放置在容器中,一行放不下,就放到下一行
BorderLayout将整个容器划分成东南西北中五个方位来放置控件,放置控件时需要指定控件放置的方位
BoxLayout可以指定在容器中是否对控件进行水平或者垂直放置,比 FlowLayout 要更为灵活
GridLayout将整个容器划分成一定的行和一定的列,可以指定控件放在某行某列上
GridBagLayout是 Swing 当中最灵活也是最复杂的布局管理器,可对控件在容器中的位置进行比较灵活的调整

本文主要关注在 BoxLayout 布局管理器的使用上。我们首先对 BoxLayout 作一下介绍。

BoxLayout 介绍

如前所述,BoxLayout 可以把控件依次进行水平或者垂直排列布局,这是通过参数 X_AXIS、Y_AXIS 来决定的。X_AXIS 表示水平排列,而 Y_AXIS 表示垂直排列。BoxLayout 的构造函数有两个参数,一个参数定义使用该 BoxLayout 的容器,另一个参数是指定 BoxLayout 是采用水平还是垂直排列。下面是一个创建 BoxLayout 实例的例子:

1

2

3

JPanel panel=new JPanel();

BoxLayout layout=new BoxLayout(panel, BoxLayout.X_AXIS);

panel.setLayout(layoout);

在这个例子中,一个 BoxLayout 布局管理器的实例 layout 被创建,这个实例被设置为 panel 的布局管理器,该布局管理器采用了水平排列来排列控件。

当 BoxLayout 进行布局时,它将所有控件依次按照控件的优先尺寸按照顺序的进行水平或者垂直放置,假如布局的整个水平或者垂直空间的尺寸不能放下所有控件,那么 BoxLayout 会试图调整各个控件的大小来填充整个布局的水平或者垂直空间。

BoxLayout 往往和 Box 这个容器结合在一起使用,这么做的理由是,BoxLayout 是把控件以水平或者垂直的方向一个接一个的放置,如果要调整这些控件之间的空间,就会需要使用 Box 容器提供的透明的组件作为填充来填充控件之间的空间,从而达到调整控件之间的间隔空间的目的。Box 容器提供了 4 种透明的组件,分别是 rigid area、strut、glue、filler。Box 容器分别提供了不同的方法来创建这些组件。这四个组件的特点如下:

  • Rigid area 是一种用户可以定义水平和垂直尺寸的透明组件;
  • strut 与 rigid area 类似,但是用户只能定义一个方向的尺寸,即水平方向或者垂直方向,不能同时定义水平和垂直尺寸;
  • 当用户将 glue 放在两个控件之间时,它会尽可能的占据两个控件之间的多余空间,从而将两个控件挤到两边;
  • Filler 是 Box 的内部类,它与 rigid area 相似,都可以指定水平或者垂直的尺寸,但是它可以设置最小,最大和优先尺寸。

用 BoxLayout 进行布局

在了解了 BoxLayout 和 Box 容器的基本特点后,我们来看一下 BoxLayout 的优点,首先 BoxLayout 可以进行对控件进行垂直或者水平布局,同时 BoxLayout 使用起来较为简单,然而把它和 Box 容器相结合,就可以进行较为复杂的布局,达到同使用 GridBagLayout 的一样的效果,但是使用起来要简单方便多了。我们用按钮的布局作为例子来看怎样运用 BoxLayout 和 Box 容器进行布局:

图 1. 应用 BoxLayout 进行按钮布局例子 1

图 1. 应用 BoxLayout 进行按钮布局例子 1

我们在布局中经常会碰到如图 1 所示要把按钮放在容器的两端,那么我们就可以给容器定义一个 BoxLayout 来布局按钮,我们在按钮 1 和按钮 2 之间放置一个不可见的 glue,如前面所提到的那样,glue 就会尽量挤占掉两个按钮之间的空间,从而将两个按钮放在两端。

图 2. 应用 BoxLayout 进行按钮布局例子 2

图 2. 应用 BoxLayout 进行按钮布局例子 2

再来看图 2 的例子,我们经常会遇到要将两个按钮放在容器的右边,我们就可以给容器定义一个 BoxLayout, 先放一个不可见的 glue,这个 glue 会挤占左边的空间,从而将两个按钮推到右边,

在两个按钮之间再放一个 strut,它也是不可见的,它会把两个按钮分隔开。

BoxLayout 布局实例

在基于前面讨论的基础上,我们现在来看一个具体的运用例子,假设图 3 是我们需要完成的用户界面:

图 3. BoxLayout 演示

图 3. BoxLayout 演示

这个演示是一个虚拟的用户对话框,只用于演示如何使用 BoxLayout, 例子代码中没有实现控件的动作。我们假定通过它用户可以选择要查询的运动会项目,然后查询,对话框中的表格显示了查询到的运动会项目的报名情况。为了完成这个布局,我们从上到下分别定义了 3 个 Panel, 分别叫做 topPanel,middlePanel,bottomPanel,这 3 个 Panel 都使用 BoxLayout。我们先看最上边的 topPanel,也就是包含表格的 Panel,topPanel 布局的基本思路是该 Panel 采用 BoxLayout 的垂直排列布局,先放置一个不可见的 Strut, 使topPanel 相 对顶部留出一定的空间,再放置包含表格的滚动窗格,再加入一个不可见的Strut,从而使topPanel和middlePanel之间留出一定的空间。TopPanel 的代码如清单 1 所示:

清单 1. topPanel 示例代码清单

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

static void createTopPanel() {

topPanel = new JPanel();

String[] columnName = { "姓名", "性别", "单位", "参加项目", "备注" };

String[][] rowData = { { "张三", "男", "计算机系", "100 米 ,200 米", "" },

{ "李四", "男", "化学系", "100 米,铅球", "" },

};

           // 创建表格

JTable table = new JTable(new DefaultTableModel(rowData, columnName));

           // 创建包含表格的滚动窗格

JScrollPane scrollPane = new JScrollPane(table);

scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

           // 定义 topPanel 的布局为 BoxLayout,BoxLayout 为垂直排列

topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.Y_AXIS));

           // 先加入一个不可见的 Strut,从而使 topPanel 对顶部留出一定的空间

topPanel.add(Box.createVerticalStrut(10));

           // 加入包含表格的滚动窗格

topPanel.add(scrollPane);

           // 再加入一个不可见的 Strut,从而使 topPanel 和 middlePanel 之间留出一定的空间

 topPanel.add(Box.createVerticalStrut(10));

}

位于中间的 middlePanel 比较复杂些,它的左边包括标签运动会项目和运动会项目列表,中间是两个按钮,我们假定点击 >> 按钮将会把用户在运动会项目列表中选中的项目移到右边的查询项目列表,点击 << 按钮则将右边查询项目列表中选中的项目移回到左边的运动会项目列表。它的布局的基本思路是定义了三个子 Panel,这三个子 Panel 分别对应最左边的标签和运动会项目列表,中间的两个按钮,和最右边的标签和查询项目列表,最左边的 Panel 采用 BoxLayout 的水平排列布局,中间的 Panel 采用 BoxLayout 的垂直排列布局,两个按钮之间加入一个不可见的 rigidArea,调整两个按钮之间的垂直距离,最右边的 Panel 采用 BoxLayout 的水平排列布局放置标签和查询项目列表。然后采用水平排列布局的 middlePanel 将三个 Panel 依次水平的加入。 MiddlePanel 的代码如清单 2 所示。

清单 2. middlePanel 示例代码清单

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

static void createMiddlePanel() {

 // 创建 middlePanel

 middlePanel = new JPanel();

 // 采用水平布局

 middlePanel .setLayout(new BoxLayout(middlePanel,BoxLayout.X_AXIS ));

 // 创建标签运动会项目      

         JLabel sourceLabel = new JLabel("运动会项目:");

 sourceLabel.setAlignmentY(Component.TOP_ALIGNMENT );

 sourceLabel.setBorder(BorderFactory.createEmptyBorder (4, 5, 0, 5));

 // 创建列表运动会项目

 DefaultListModel listModel = new DefaultListModel();

 listModel.addElement("100 米");

 listModel.addElement("200 米");

 listModel.addElement("400 米");

 listModel.addElement("跳远");

 listModel.addElement("跳高");

 listModel.addElement("铅球");

 JList sourceList = new JList(listModel);

 sourceList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );

 sourceList.setVisibleRowCount(5);

 JScrollPane sourceListScroller = new JScrollPane(sourceList);

 sourceListScroller.setPreferredSize(new Dimension(120, 80));

 sourceListScroller

 .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS );

 sourceListScroller.setAlignmentY(Component.TOP_ALIGNMENT );

 // 创建最左边的 Panel

 JPanel sourceListPanel = new JPanel();

 // 最左边的 Panel 采用水平布局

 sourceListPanel.setLayout(new BoxLayout(sourceListPanel,

 BoxLayout.X_AXIS ));

 // 加入标签到最左边的 Panel

 sourceListPanel.add(sourceLabel);

 // 加入列表运动会项目到最左边的 Panel

 sourceListPanel.add(sourceListScroller);

 sourceListPanel.setAlignmentY(Component.TOP_ALIGNMENT );

 sourceListPanel.setBorder(BorderFactory.createEmptyBorder (0, 0, 0, 30));

 // 将最左边的 Panel 加入到 middlePanel

 middlePanel .add(sourceListPanel);

 // 定义中间的两个按钮      

 JButton toTargetButton = new JButton(">>");

 JButton toSourceButton = new JButton("<<");

 // 定义中间的 Panel

 JPanel buttonPanel = new JPanel();

 // 中间的 Panel 采用水平布局

 buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS ));

 // 将按钮 >> 加入到中间的 Panel

 buttonPanel.add(toTargetButton);

 

//两个按钮之间加入一个不可见的 rigidArea         

 buttonPanel.add(Box.createRigidArea (new Dimension(15, 15)));

 // 将按钮 << 加入到中间的 Panel

 buttonPanel.add(toSourceButton);

 buttonPanel.setAlignmentY(Component.TOP_ALIGNMENT );

 buttonPanel.setBorder(BorderFactory.createEmptyBorder (15, 5, 15, 5));

 // 将中间的 Panel 加入到 middlePanel

 middlePanel .add(buttonPanel);

 // 创建标签查询项目

 JLabel targetLabel = new JLabel("查询项目:");

 targetLabel.setAlignmentY(Component.TOP_ALIGNMENT );

 targetLabel.setBorder(BorderFactory.createEmptyBorder (4, 5, 0, 5));

 

// 创建列表查询项目        

 DefaultListModel targetListModel = new DefaultListModel();

 targetListModel.addElement("100 米");

 JList targetList = new JList(targetListModel);

 targetList

 .setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );

 targetList.setVisibleRowCount(5);

 JScrollPane targetListScroller = new JScrollPane(targetList);

 targetListScroller.setPreferredSize(new Dimension(120, 80));

 targetListScroller

 .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS );

 targetListScroller.setAlignmentY(Component.TOP_ALIGNMENT );

 // 创建最右边的 Panel

 JPanel targetListPanel = new JPanel();

 // 设置最右边的 Panel 为水平布局

 targetListPanel.setLayout(new BoxLayout(targetListPanel,

 BoxLayout.X_AXIS ));

 // 将标签查询项目加到最右边的 Panel

 targetListPanel.add(targetLabel);

 // 将列表查询项目加到最右边的 Panel

 targetListPanel.add(targetListScroller);

 targetListPanel.setAlignmentY(Component.TOP_ALIGNMENT );

 targetListPanel.setBorder(BorderFactory.createEmptyBorder (0, 30, 0, 0));

 // 最后将最右边的 Panel 加入到 middlePanel

 middlePanel .add(targetListPanel);

     }

我们最后来看一下 bottomPanel 如何布局,bottomPanel 包括分布在两边的两个按钮,其实 bottomPanel 的布局和章节用 BoxLayout 进行布局中的图 1 是一致的,我们在两个按钮之间加入一个 glue, 这个 glue 会挤占两个按钮之间的空间,从而将两个按钮布局到两边,在 bottemPanel 中用一个 buttonPanel 来放置这两个按钮。BottomPanel 采用 BoxLayout, 首先放入一个 strut, 从而使 bottomPanel 和 middlePanel 之间留出距离,再放入 buttonPanel,再放入一个 strut, 从而使 bottomPanel 和底部之间留出距离,BottomPanel 的代码如清单 3 所示。

清单 3. bottomPanel 示例代码清单

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

static void createBottomPanel() {

            // 创建查询按钮

    JButton actionButton = new JButton("查询");

         // 创建退出按钮

    JButton closeButton = new JButton("退出");

         // 创建 bottomPanel

    bottomPanel = new JPanel();

            // 设置 bottomPanel 为垂直布局

    bottomPanel .setLayout(new BoxLayout(bottomPanel,BoxLayout.Y_AXIS ));

            // 创建包含两个按钮的 buttonPanel

    JPanel buttonPanel = new JPanel();

         // 设置 bottomPanel 为水平布局

    buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS ));

            // 将查询按钮加入到 buttonPanel

    buttonPanel.add(actionButton);

 

//加入一个 glue, glue 会挤占两个按钮之间的空间         

 buttonPanel.add(Box.createHorizontalGlue ());

            // 将退出按钮加入到 buttonPanel

 buttonPanel.add(closeButton);

            // 加入一个 Strut,从而使 bottomPanel 和 middlePanel 上下之间留出距离

 bottomPanel .add(Box.createVerticalStrut (10));

            // 加入 buttonPanel

 bottomPanel .add(buttonPanel);

            // 加入一个 Strut,从而使 bottomPanel 和底部之间留出距离

 bottomPanel .add(Box.createVerticalStrut (10));

     }

我们用一个 Panel 来从上到下放置 topPanel、middlePanel 和 bottomPanel,这个 Panel 采用了 GridBagLayout, 最后我们将这个 Panel 加到一个窗体中去,请参考清单 4。

清单 4. 创建窗体示例代码清单

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

public static void main(String[] args) {

           // 创建 topPanel

createTopPanel ();

        // 创建 middlePanel

createMiddlePanel ();

        // 创建 bottomPanel

createBottomPanel ();

        // 创建包含 topPanel,middlePanel 和 bottomPanel 的 panelContainer

JPanel panelContainer = new Jpanel();

        //panelContainer 的布局为 GridBagLayout

panelContainer.setLayout(new GridBagLayout());

 

GridBagConstraints c1 = new GridBagConstraints();

c1.gridx = 0;

c1.gridy = 0;

c1.weightx = 1.0;

c1.weighty = 1.0;

c1.fill = GridBagConstraints.BOTH ;

        // 加入 topPanel

panelContainer.add(topPanel,c1);

 

GridBagConstraints c2 = new GridBagConstraints();

c2.gridx = 0;

c2.gridy = 1;

c2.weightx = 1.0;

c2.weighty = 0;

c2.fill = GridBagConstraints.HORIZONTAL ;

        // 加入 middlePanel

panelContainer.add(middlePanel,c2);

 

GridBagConstraints c3 = new GridBagConstraints();

c3.gridx = 0;

c3.gridy = 2;

c3.weightx = 1.0;

c3.weighty = 0;

c3.fill = GridBagConstraints.HORIZONTAL ;

        // 加入 bottomPanel

panelContainer.add(bottomPanel,c3);

        

        // 创建窗体

JFrame frame = new JFrame("Boxlayout 演示");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );

panelContainer.setOpaque(true);

frame.setSize(new Dimension(480, 320));

frame.setContentPane(panelContainer);

frame.setVisible(true);

}

本文的例子是在文件 BoxLayoutDemo.zip 中,您将其展开,导入到 Eclipse 中去,就可运行例子。

结束语

您通过本文的介绍,可以对 BoxLayout 这个布局管理器如何进行布局能够有一定的了解,也可以在自己的实践过程中进一步总结出自己的方法。

陀螺仪与加速度计的姿态融合——互补滤波 本篇文章我们来讲讲如何将陀螺仪和加速度计的数据结合起来,获取更准确的姿态数据,使用的是互补滤波的方法。 阅读详情

相关推荐

[cryoEM] cryoSPARC简介

cryoSPARC系统结构概述 cryoSPARC是一个后端和前端高性能计算软件系统,为单颗粒冷冻电镜提供数据处理和图像分析能力,以及丰富的基于浏览器的用户截面和命令行工具。 Master-worker模式 系统基于主用户模式。 主进程(web应用,核心应用程序和MongoDB数据库)一起在主节点上运行。主节点需要相对轻量级的资源(2+ CPU< 16GB+ RAM)。 工作程序进程可以在具有GPU的任何可用节点上生成,负责所有实际计算和数据处理,并由主节点调度。注意:同一节点可以同时充当主节点和辅

进阶中的程序员吃吃的博客 7797

Swing框式布局(BoxLayout,Box)应用详解

转自 http://www.boxcode.cn/html/JAVA/J2SE/2009/0813/636.html框式布局利用无序网格布局,几乎可以产生任意复杂的布局模型。除了这一个AWT布局管理器之外,Swing还引入了另外一个叫做框式布局(Box Layout)的结构。框式布局能够生成复杂的布局结构,但却没有像使用无序网格布局那样麻烦。编程者不必处理任何权值,也不用采用反复试验的方法

java_jun的专栏 7497

Sobel原理及计算过程详解

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。首先,我们需要构建一个Sobel算子,通常是一个 3x3 的矩阵。Sobel算子可以分别计算水平和垂直方向的梯度值,然后将两者合并得到总梯度值。索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度近似值。所以,我们假设选择图像矩阵中的点A(1, 1),即第二行第二列的元素,对应的。接下来,我们将使用Sobel算子计算这个点的梯度值。

2301_76461741的博客 1万+

java布局中的BoxLayout布局,使用BoxLayout进行Swing布局

在用户使用 Java Swing 进行用户界面开发过程中,会碰到如何对 Java Swing 的控件进行布局的问题。Swing 的控件放置在容器 (Container) 中,容器就是能够容纳控件或者其它容器的类,容器的具体例子有 Frame、Panel 等等。容器需要定义一个布局管理器来对控件进行布局管理,Swing 当中提供的主要的布局管理器有 FlowLayout、BorderLayout、B...

weixin_33709219的博客 1092

Windows下QT5.15.2安装MQTT模块全攻略(附分支选择避坑指南)

本文详细介绍了在Windows环境下为QT5.15.2安装MQTT模块的完整流程,包括环境准备、源码获取、编译配置及项目集成等关键步骤。特别针对分支选择、依赖项处理和常见错误提供了实用解决方案,帮助开发者高效完成MQTT模块的安装与调试,适用于物联网开发场景。

weixin_29224589的博客 466

UG NX二次开发基础篇-外部模式与DLL内部模式(二 DLL内部模式)

通常情况下,我们希望我们的外挂,在UG启动的时候,就自动加载我们的外挂,并以菜单和工具条的方式,显示在UG上面。当然,这也是市面上所有外挂的操作,因为您不可能要求你的用户,以手工加载的方式,去调用你的外挂吧。在上一篇中,有粉丝留言说,启动 bat 文件,启动EXE外挂,会提示无法找到DLL的错误,这是因为UG的环境变量设置有问题,这里,我们把BAT文件作一个修改,直接改为实际目录。EXE外部模式,还有很多部分需要添加的,如参数的传递、输出消息的显示、UG操作的消息显示,等等。Dll执行结束后,会调用。

u014657217的博客 1655

【Swing】BoxLayout盒式布局管理器

BoxLayout(盒布局管理器)通常和 Box 容器联合使用,Box 类有以下两个静态方法。 createHorizontalBox():返回一个 Box 对象,它采用水平 BoxLayout,即 BoxLayout 沿着水平方向放置组件,让组件在容器内从左到右排列。 createVerticalBox():返回一个 Box 对象,它采用垂直 BoxLayout,即 BoxLayout 沿着...

XiaoChen~Coder 2140

SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇) 第一篇:需求梳理与架构设计:从零搭建SAP主数据校验能力底座

摘要: 本系列博客介绍SAP主数据校验工具的开发和设计,旨在解决物料、供应商、客户等主数据录入不规范、关联缺失和合规性问题。第一篇聚焦需求梳理与架构设计,提出分层技术架构(展示层、业务逻辑层、数据访问层),支持实时校验和批量校验两种模式,并详细说明规则引擎设计、SAP系统对接方案及权限管控逻辑。后续篇章将深入规则引擎实现、接口对接、结果可视化和性能优化,帮助构建集中式、可配置的主数据校验能力,提升SAP数据质量。

baidu_35680696的博客 330

Java的BoxLayout

BoxLayout是 Java Swing 中用于排列组件的布局管理器。它可以沿着一个轴(X轴或Y轴)顺序地排列组件。使用BoxLayout, 组件可以在水平轴(从左到右)或垂直轴(从上到下)上排列。要使用BoxLayout以下是BoxLayoutBoxLayoutBoxLayoutBoxBoxLayoutJComponent。

weixin_63490470的博客 1379

YOLO项目部署:从Python脚本到Docker容器的企业级交付全流程

YOLO模型企业级Docker部署方案 核心挑战 环境一致性:解决"本地能跑,服务器崩掉"问题 可扩展性:支持单实例到多实例扩展 稳定性:确保99.9%可用性 部署流程 项目改造:模块化代码,分离配置 Docker镜像:支持CPU/GPU环境 API服务:封装推理逻辑 监控告警:实现自动化运维 技术方案 需求 解决方案 环境一致性 Docker镜像+依赖冻结 可扩展性 K8s+负载均衡 稳定性 健康检查+自动重启 项目结构 模块化代码组织 外部化配置管理 精确依赖版本控制 摘要重点:通过

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1230

Vue3 - 实现内网使用天地图离线地图,详解项目加载天地图的离线地图服务器部署与使用教程示例源码,vue3如何实现天地图的离线加载部署在内网访问(天地图资源下载/瓦片等流程教学,实现天地图各种功能)

Vue3中加载天地图的离线地图,天地图——内网使用离线地图,vue3+leaflet实现天地图离线访问,vue3项目中利用leaflet使用天地图,vue3项目中使用天地图离线地图,天地图离线瓦片的打包与发布(GeoServer)天地图离线瓦片数据下载及本地化部署,在内网中无法直接使用外网天地图资源怎么办,在vue3中openLayers加载地图 -使用天地图的瓦片数据。VUE3天地图离线怎么使用,内网部署天地图,天地图离线瓦片,部分瓦片数据,天地图如何离线,无需网络调用天地图API,vue天地图离线地图,

🏆 前端领域优质创作者 1万+

运用 BoxLayout 进行 Swing 控件布局

引言 在用户使用 Java Swing 进行用户界面开发过程中,会碰到如何对 Java Swing 的控件进行布局的问题。Swing 的控件放置在容器 (Container) 中,容器就是能够容纳控件或者其它容器的类,容器的具体例子有 Frame、Panel 等等。容器需要定义一个布局管理器来对控件进行布局管理,Swing 当中提供的主要的布局管理器有 FlowLayout、BorderLay...

lvjun106 290

LVS 负载均衡面试题及参考答案

什么是 LVS 负载均衡?它的主要作用是什么? LVS(Linux Virtual Server)是一个基于 Linux 内核的开源负载均衡项目。它通过将请求流量按照一定的算法分发到后端的多个真实服务器(Real Server)上,从而实现负载均衡的功能。 从原理上来说,LVS 工作在网络层和传输层之间。当客户端发起请求时,请求首先到达 LVS 服务器,LVS 会根据预先设定的规则和算法,比如轮询(Round - Robin)、加权轮询(Weighted Round - Robin)、最少连

大模型大数据攻城狮的专栏 1469

java boxlayout_运用 BoxLayout 进行 Swing 控件布局

对于初学 Java Swing 的开发人员来说,控件的布局是比较困难的。相对于 FlowLayout 而言,BoxLayout 比较灵活,有更大的功能,可以完成比较复杂界面的布局,本文将在基于例子的基础上给出如何较好的使用 BoxLayout, 可以给 Java Swing 的初学者一些启发。引言在用户使用 Java Swing 进行用户界面开发过程中,会碰到如何对 Java Swing 的控件进...

weixin_35241897的博客 418

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java布局_运用 BoxLayout 进行 Swing 控件布局

引言在用户使用 Java Swing 进行用户界面开发过程中,会碰到如何对 Java Swing 的控件进行布局的问题。Swing 的控件放置在容器 (Container) 中,容器就是能够容纳控件或者其它容器的类,容器的具体例子有 Frame、Panel 等等。容器需要定义一个布局管理器来对控件进行布局管理,Swing 当中提供的主要的布局管理器有 FlowLayout、BorderLayout...

weixin_39636610的博客 466

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java boxlayout_java布局中的BoxLayout布局,使用BoxLayout进行Swing布局

在用户使用 Java Swing 进行用户界面开发过程中,会碰到如何对 Java Swing 的控件进行布局的问题。Swing 的控件放置在容器 (Container) 中,容器就是能够容纳控件或者其它容器的类,容器的具体例子有 Frame、Panel 等等。容器需要定义一个布局管理器来对控件进行布局管理,Swing 当中提供的主要的布局管理器有 FlowLayout、BorderLayout、B...

weixin_33844346的博客 488

box布局 java_Java Swing组件BoxLayout布局用法示例

本文实例讲述了Java Swing组件BoxLayout布局用法。分享给大家供大家参考,具体如下:BoxLayout 可以把控件依次进行水平或者垂直排列布局,这是通过参数 X_AXIS、Y_AXIS 来决定的。X_AXIS 表示水平排列,而 Y_AXIS 表示垂直排列。BoxLayout 的构造函数有两个参数,一个参数定义使用该 BoxLayout 的容器,另一个参数是指定 BoxLayout 是...

weixin_39851914的博客 576

java中利用box布局_Java Swing组件BoxLayout布局用法示例

本文实例讲述了Java Swing组件BoxLayout布局用法。分享给大家供大家参考,具体如下:BoxLayout 可以把控件依次进行水平或者垂直排列布局,这是通过参数 X_AXIS、Y_AXIS 来决定的。X_AXIS 表示水平排列,而 Y_AXIS 表示垂直排列。BoxLayout 的构造函数有两个参数,一个参数定义使用该 BoxLayout 的容器,另一个参数是指定 BoxLayout 是...

weixin_42506706的博客 933

java垂直排布控件_本文实例讲述了Java Swing组件BoxLayout布局用法。分享给大家供大家参考,具体如下:BoxLayout 可以把控件依次进行水平或者垂直排列布局,...

本文实例讲述了Java Swing组件BoxLayout布局用法。分享给大家供大家参考,具体如下:BoxLayout 可以把控件依次进行水平或者垂直排列布局,这是通过参数 X_AXIS、Y_AXIS 来决定的。X_AXIS 表示水平排列,而 Y_AXIS 表示垂直排列。BoxLayout 的构造函数有两个参数,一个参数定义使用该 BoxLayout 的容器,另一个参数是指定 BoxLayout 是...

weixin_42429893的博客 1650

java布局 BoxLayout布局

BoxLayout BoxLayout 可以把控件依次进行水平或者垂直排列布局,这是通过参数 X_AXIS、Y_AXIS 来决定的。X_AXIS 表示水平排列,而 Y_AXIS 表示垂直排列。BoxLayout 的构造函数有两个参数,一个参数定义使用该 BoxLayout 的容器,另一个参数是指定 BoxLayout 是采用水平还是垂直排列。下面是一个创建 BoxLayout 实例的例子:  

*番茄脸红红* 1591

java boxlayout_Java Swing组件BoxLayout布局用法示例

编程之家收集整理的这篇文章主要介绍了Java Swing组件BoxLayout布局用法示例,编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随编程之家小编过来看看吧!本文实例讲述了Java Swing组件BoxLayout布局用法。分享给大家供大家参考,具体如下:BoxLayout 可以把控件依次进行水平或者垂直排列布局,这是通过参数 X_AXIS、Y_AXIS 来决定的。X_A...

weixin_35172689的博客 683

BoxLayout进行Swing布局

引言    在用户使用 Java Swing 进行用户界面开发过程中,会碰到如何对 Java Swing 的控件进行布局的问题。Swing 的控件放置在容器 (Container) 中,容器就是能够容纳控件或者其它容器的类,容器的具体例子有 Frame、Panel 等等。容器需要定义一个布局管理器来对控件进行布局管理,Swing 当中提供的主要的布局管理器有 FlowLayout、BorderL

ytlcainiao的专栏 722

BoxLayout组件间隙处理

运用 BoxLayout 进行 Swing 控件布局陈 怡平2012 年 12 月 03 日发布WeiboGoogle+用电子邮件发送本页面 2引言在用户使用 Java Swing 进行用户界面开发过程中,会碰到如何对 Java Swing 的控件进行布局的问题。Swing 的控件放置在容器 (Container) 中,容器就是能够容纳控件或者其它容器的类,容器的具体例子有 Frame、Panel...

朝闻道_的博客 4726
上一篇: JTextField 默认文字提示功能(转)
下一篇: 【LLM基础】1.Pytorch学习
RuiBo_Qiu
博客等级 码龄11年 158粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值