java中的布局管理器,java面板默认的布局管理器是

java中的布局管理器,java面板默认的布局管理器是,一篇文章带你了解Java容器,面板及四大布局管理器应用

本文主要介绍一个JAVA布局管理器和面板组合代码的例子。文中详细介绍了示例代码,对大家的学习或工作有一定的参考价值。有需要的朋友可以参考一下。

目录

什么是容器?什么是面板?JPanel面板JScrollPane面板什么是布局管理器?绝对布局管理器流程布局管理器边界布局管理网格布局管理器容器、面板、布局管理器关系摘要

什么是容器?

在Java的GUI界面设计中,关于容器的理解,我们可以从字面上认为是存放控件的地方,而这个地方取决于窗体,常用的容器就是container。

而关于container容器我们应该有这样的认识:Swing组件中的表单通常是与容器相关联的,所以一般来说,在构建一个JFrame表单后,我们会调用getContentPane()方法将表单转换成容器,然后在容器中添加控件或布局管理器。有两种方法可以在容器中添加和删除控件:

容器. add();//为容器添加控件

容器. remove();//为容器添加控件

实例程序如下:

公共类ConJFrame扩展JFrame{

公共配置框架(){

Settle('容器container ');

setSize(400,400);

container container=getContentPane();//将窗体变成容器

/* * * * * * * * * * * *向容器添加标签* * * * * * * * * * * * * * * *

JLabel jLabel=new JLabel('这是容器');

jLabel.setBounds(100,100,200,50);

container . add(jLabel);//将控件添加到容器中

/* * * * * * * * * * * *在容器中添加按钮后移除* * * * * * * * * *

JButton jButton=new JButton('这是一个按钮');

jButton.setBounds(100,200,200,50);

container . add(jButton);//将按钮添加到容器中

container . remove(jButton);//从容器中移除按钮

set layout(null);//清空布局管理器

set visible(true);//将窗体设置为可见

setLocationRelativeTo(null);//设置表单中心

setDefaultCloseOperation(window constants。EXIT _ ON _ CLOSE);//设置窗体关闭模式。

}

公共静态void main(String[] args) {

//TODO自动生成的方法存根

new conf frame();

}

}

效果如下:

什么是面板?

关于面板的解释,你可以认为它也是一个容器,但是这个容器必须添加到其他容器中。Swing中常用的面板有两种,分别是JPanel面板和JScrollPane面板。这里分别介绍这两种面板的用途:

JPanel面板

在JPanel面板中,我们可以添加一些组件来布局面板中的内容。之所以有这样的功能,是因为JPanel面板也继承了java.awt.Container类,所以也有了容器容器的功能。

但是与Container容器不同的就是:容器容器不需要添加到其他容器中,但是JPanel面板必须添加到其他容器中。

所以我们可以理解JPanel panel其实就是一个大容器的划分,按照一定的规则把容器划分成小面板(布局管理)。因此,JPanel面板的使用一般与布局管理器结合使用,

JScrollPane面板

我们来看看界面设计中的一个常见问题:在较小的界面中显示较大的内容时。在这种情况下,我们常用的方法是将较小的容器设置为JScrollPane面板。原因是JScrollPane面板自带滚动条,同时也是一个容器,这也是我们做相关开发时设置滚动条的常用方法。

使用JScrollPane面板时需要注意以下两个问题:

JScrollPane面板中只能排列一个控件,

JScrollPane面板无法使用布局管理器

因此如果想要在JScrollPane面板中显示多个控件,就需要首先将控件布局在JPanel面板中,之后将JPanel面板作为一个整体组件添加到JScrollPane面板中,

通过以下程序练习JScrollPane面板:

下面的程序是在JScrollPane面板中添加一个文本框,实现一个带滚动条的文本框。

公共类JScrollPaneClass扩展JFrame{

public JScrollPaneClass() {

SetTitle(' JScrollPane panel ');

setSize(400,400);

container container=getContentPane();//将窗体变成容器

/* * * * * * * * * * * * * *在JScrollPane面板中添加文本框* * * * * * * * * * * * * * * * * *

JTextArea JTextArea=new JTextArea();

JScrollPane JSP=new JScrollPane(jTextArea);

container . add(JSP);//将JScrollPane面板添加到容器中

set visible(true);//将窗体设置为可见

setLocationRelativeTo(null);//设置表单中心

setDefaultCloseOperation(window constants。EXIT _ ON _ CLOSE);//设置窗体关闭模式。

}

公共静态void main(String[] args) {

//TODO自动生成的方法存根

new JScrollPaneClass();

}

}

效果如下:

什么是布局管理器?

至于布局管理器,在swing中,每个组件都有一个特定的位置和大小,但是实际上很难判断这些组件实际放在容器中的具体位置和大小。布局管理器为Swing组件提供了一种排版方法,因此布局管理器可以有效地处理整个表单中组件的布局。Swing提供了四种常见的布局管理器:绝对布局管理器、流布局管理器、边界布局管理器和

绝对布局管理器

除了网格布局管理器、流布局管理器、边界布局管理器,还有一种不同的布局方式,就是绝对布局。所谓绝对布局,就是按照一定的坐标数据,在表单上刚性地设定构件的坐标和尺寸。

使用绝对布局时,首先要注意的是:

首先取消默认布局管理器,方法是:

set layout(null);//清空布局管理器,即取消原有的边界布局管理器。

然后使用以下方法绝对定位组件:

setBounds(x,y,width,height);

//其中x表示组件基于容器左上角的横坐标,y表示纵坐标,width表示组件的宽度,height表示组件的高度。

请看下面的例子:在具有绝对布局的容器中添加三个控件,并分配横坐标和纵坐标以及按钮的长度和宽度:

public class absolutely layout class扩展JFrame{

public AbsolutelyLayoutClass() {

SetTitle(“绝对布局管理器”);

setSize(600,300);

container container=getContentPane();//将窗体变成容器

/* * * * * * * * * * * *使用绝对布局管理器对组件进行布局* * * * * * * * * * * * * * * *

JButton jb1=new JButton('这是绝对布局1 ');

jb1.setBounds(200,50,200,30);//设置组件的绝对坐标

container . add(jb1);//将组件添加到容器中

JButton jb2=new JButton('这是绝对布局2 ');

jb2.setBounds(200,100,200,30);//设置组件的绝对坐标

container . add(jb2);//将组件添加到容器中

JButton jb3=new JButton('这是绝对布局3 ');

jb3.setBounds(200,150,200,30);//设置组件的绝对坐标

container . add(jb3);//将组件添加到容器中

set layout(null);//清空布局管理器,即取消原有的边界布局管理器。

set visible(true);//将窗体设置为可见

setLocationRelativeTo(null);//设置表单中心

setDefaultCloseOperation(window constants。EXIT _ ON _ CLOSE);//设置窗体关闭模式。

}

公共静态void main(String[] args) {

//TODO自动生成的方法存根

new AbsolutelyLayoutClass();

}

}

效果如下:

在使用绝对布局管理器时值得注意的就是:在使用绝对布局之前调用setLayout(null)方法,以通知编辑器此处将不使用默认布局管理器。

流布局管理器

FlowLayout管理器(FlowLayout)的特点是,它里面的组件可以像“流”一样从左到右排列,排列完一行后再从下一行继续排列。默认情况下,组将被排列在流布局管理器的中间,但是排列的顺序可以改变。

FlowLayout类中的构造函数中有如下三种:

public flow layout();

公共FlowLayout(int对齐);

Public FlowLayout(int alignment,int horizGap,int vertGap);

以上构造函数中的alignment参数表示组件在采用流布局管理器后在每一行的具体排放位置。可以赋的值为:

流程布局。左=0;

流程布局。中心=1;

流程布局。右=2;

在给出上述三个值之后,它们指示了组件在流布局管理器的每一行中的放置位置和顺序。例如,当alignment=0时,流布局管理器中的组件从左到右排列,当alignment=1时,流布局管理器中的组件从中间到两端排列。

在public flowlayout中(int alignment,int horiz gap,int vertgap);在该方法中,以下参数horizGap和vertGap分别表示以像素为单位的指定分量之间的水平间隔和垂直间隔。

流程布局管理器的具体使用请参考下面的例子:

根据流程布局管理器在表单中添加10个按钮。

公共类FlowLayoutClass扩展JFrame{

公共FlowLayoutClass() {

SetTitle(“流布局管理器”);

setSize(600,300);

container container=getContentPane();//将窗体变成容器

/* * * * * * * * * * * * * *使用流布局管理器布局组件* * * * * * * * * * * * * *

//将容器设置为从左到右排列的流程布局管理器,组件的水平间隔和垂直间隔分别为10。

container.setLayout(新的FlowLayout(0,10,10));

for(int I=0;i 10i ) {

Container.add(新JButton(' stream layout button ' I));

}

//set layout(null);//清空布局管理器,即取消原有的边界布局管理器。

set visible(true);//将窗体设置为可见

setLocationRelativeTo(null);//设置表单中心

setDefaultCloseOperation(window constants。EXIT _ ON _ CLOSE);//设置窗体关闭模式。

}

公共静态void main(String[] args) {

new FlowLayoutClass();

}

}

效果如下:

当我们改变表单的大小时,其中的组件也会根据流布局的特性而改变,这验证了流布局管理器中的组件是从左到右依次放置的,然后从下一行开始放置,直到该行满。

边界布局管理

当默认情况下没有指定表单布局时,Swing组件的布局模式是BorderLayout。这个布局管理器的特点是组件会按照一定的要求填充整个容器的边框。

布局管理器可以将容器分成五个区域:东、南、西、北和中。当向容器中添加组件时,我们可以设置将该组放在哪个区域中。区域的控制可以通过使用BorderLayout类中的成员方法来确定。关于这些成员变量的具体含义,请参考下表:

成员变量

意义

BorderLayout。北方

当您将组件添加到容器中时,该组件被放置在顶部。

BorderLayout。南方

当您将组件添加到容器中时,该组件被放置在底部。

BorderLayout。东方

当您将组件添加到容器中时,该组件被放置在右端。

BorderLayout。西方的

向容器中添加组件时,组件被放置在左端。

BorderLayout。中心

向容器中添加组件时,该组件被放置在中间并开始填充,直到它与其他组件边界连接。

关于边界布局管理器的具体使用,请参考下面的例子。容器分为东、南、西、北、中五个区域,每个区域添加组件。

公共类BorderLayoutClass扩展JFrame{

public BorderLayoutClass() {

SetTitle(“边界布局管理器”);

setSize(600,300);

container container=getContentPane();//将窗体变成容器

/* * * * * * * * * * * *使用边界布局管理器布局组件* * * * * * * * * * * * * *

//将容器设置为边界布局管理器

container . set layout(new BorderLayout());

Container.add(新JButton('我是北方地区'),BorderLayout。北);//将按钮添加到北部区域

Container.add(新JButton('我是西域'),BorderLayout。西);//将按钮添加到西部区域

Container.add(新JButton('我是中央区'),BorderLayout。中心);//将按钮添加到中间区域

Container.add(new JButton('我是东部地区'),BorderLayout。东);//将按钮添加到东部区域

Container.add(new JButton('我是南方地区'),BorderLayout。南);//将按钮添加到南部区域

//set layout(null);//清空布局管理器,即取消原有的边界布局管理器。

set visible(true);//将窗体设置为可见

setLocationRelativeTo(null);//设置表单中心

setDefaultCloseOperation(window constants。EXIT _ ON _ CLOSE);//设置窗体关闭模式。

}

公共静态void main(String[] args) {

//TODO自动生成的方法存根

new BorderLayoutClass();

}

}

效果如下:

在这个方法中,直接在add()方法中创建新组件,并在后面添加一个指示组件位置的参数。

网格布局管理器

GridLayout Manager (GridLayout)字面意思是根据行和列将容器划分成特定的网格。在网格布局管理器中,每个网格的大小是相同的,网格中网格的数量由行和列决定。例如,具有两行和两列的网格布局将被分成四个大小相同的网格。

网格布局中的组将从左到右、从上到下添加到网格中,添加到网格中的组件将填充网格。同时,改变窗体的大小也会改变网格的大小。

网格布局中常用的布局管理器有如下两种:

Public GridLayout(int rows,int columns);

Public GridLayout(int rows,int columns,int horizGap,int vertGap);

的行和列分别表示网格布局的行和列。这两个参数中只有一个可以是0,这意味着多个组件可以放在一行或一列中。horizGap和vertGap与流布局管理器中的相同,只是它们表示流布局管理器中组件之间的水平和垂直间距,以及网格布局管理器中网格之间的水平和垂直间距。

对于网格布局管理器的具体使用,请参考下面的例子,

将容器设置为4行5列的网格,网格之间的水平和垂直间距为10像素。给它加20个按钮。

公共类GridLayoutClass扩展JFrame{

public GridLayoutClass() {

SetTitle(“网格布局管理器”);

setSize(600,300);

container container=getContentPane();//将窗体变成容器

/* * * * * * * * * * * * * *使用网格布局管理器布局组件* * * * * * * * * * * * * *

//将容器设置为4行5列的网格布局管理器,网格之间的水平和垂直间距为10像素。

container . set layout(new GridLayout(4,5,10,10));

for(int I=0;i 20i ) {

Container.add(新的JButton(' grid ' I));

}

//set layout(null);//清空布局管理器,即取消原有的边界布局管理器。

set visible(true);//将窗体设置为可见

setLocationRelativeTo(null);//设置表单中心

setDefaultCloseOperation(window constants。EXIT _ ON _ CLOSE);//设置窗体关闭模式。

}

公共静态void main(String[] args) {

//TODO自动生成的方法存根

new GridLayoutClass();

}

}

效果如下

当你拖动窗体改变它的大小时,网格的大小也会改变。

容器、面板、布局管理器之间的关系

关于Swing窗体开发中的容器、面板、布局管理器之间有如下的关系:

面板应该放置在容器中,

布局管理器可以设置在容器或面板中,

还可以在布局管理器中嵌套面板,在布局管理器中可以添加布局管理器。

只有深刻理解这三者之间的关系,才能在形态发展中很好地结合起来。

总结

本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: